「[1] + Exit 1」応答はどういう意味ですか?

「[1] + Exit 1」応答はどういう意味ですか?

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が説明したように、角かっこ内の数字は順次作業番号です。 + は最近のジョブにのみ与えられ、- は前のジョブにのみ与えられます。他のすべての職業には記号はありません。

関連情報