Pythonプログラムをバックグラウンドで実行し続け、使用中のSSH接続を終了するためにこのコマンドを実行しました。
nohup python files.py >> files.log &
ps
次に、機能していることを確認します。
$ ps a
PID TTY STAT TIME COMMAND
13059 pts/0 Ss 0:00 -bash
13327 pts/0 R+ 0:00 ps a
[1]+ Exit 1 nohup python files.py >> files.log
どういう意味ですか[1]+ Exit 1
?
プログラムをバックグラウンドで実行して正しく終了するにはどうすればよいですか?
答え1
bashのコマンドの最後にそれを使用すると、&
バックグラウンドでコマンドが実行されます。[1]+ Exit 1
タスク1が状態1で終了したことを示します。間の数字[]
はジョブ番号で、その後の数字Exit
は終了状態です。終了ステータスが表示されない場合は、コマンドがステータスで終了したことを意味します0
。
他のコマンドを実行する前にこのメッセージが表示されないのは、デフォルトで完了したバックグラウンドコマンドのステータスがプロンプトが更新されるまで表示されないためです。これは、他のコマンドが終了した後、または空のプロンプトを押すこと<ENTER>
ができることを意味します。
編集:
また、.Bashを使用する必要はありませんnohup
。シェル自体がHUPを受信したときにのみプロセスをHUPします。完全に終了すると(またはCTRL + Dを介して)、exit
これは発生しません。
ただし、disown
特定のタスクがHUPを取得しないように、組み込み関数を使用してこれを達成することもできます。
最後に、次の手順を実行して、シェルがHUPを取得したときにすべての操作を拒否するようにSIGHUPハンドラを設定することもできますfunction sighup { disown -a; exit 0; }; trap sighup HUP
。
答え2
Patrickの答えは正しいですが、Stefanのポイントはnohup
他のバージョンのユーザーにとって重要です。ただし、+(プラス)記号の意味はありません。ここでは「現在」の操作を意味します。たとえば、一度に3つのコマンドを送信したい場合:
$ sleep 5&
[1] 29056
$ sleep 5&
[2] 29091
$ sleep 5&
[3] 29147
次に5秒間待ってからEnterを押します。出力は次のとおりです。
[1] Done sleep 5
[2]- Done sleep 5
[3]+ Done sleep 5
Patrickが説明したように、角かっこ内の数字は順次作業番号です。 + は最近のジョブにのみ与えられ、- は前のジョブにのみ与えられます。他のすべての職業には記号はありません。