shell - 違い - nohup 確認




すでに実行中のプロセスをnohupで実行するにはどうすればよいですか? (7)

私はすでに長い時間実行されているプロセスを持っていて、終了したくありません。

私はどのようにそれをnohupの下に置くのですか(つまり、私が端末を閉じてもそれをどのように実行させるのでしょうか?)


  1. Ctrl + Z - これはジョブを一時停止します(キャンセルはしません)。
  2. bg - これはバックグラウンドでジョブを実行し、実行中のプロセスに戻ります
  3. disown -a - これはすべての添付ファイルをジョブで切断します(ターミナルを閉じても実行できます)

これらの簡単な手順により、プロセスを実行したまま端末を閉じることができます。

それはあなたの質問の私の理解に基づいてnohupを置くことはありません、あなたはここにそれを必要としません。


bashのジョブ制御を使用してプロセスをバックグラウンドに送信する:

  1. Ctrl + Z押すと、プログラムを停止(一時停止)してシェルに戻ります。
  2. bgをバックグラウンドで実行します。
  3. disown -h [job-spec]ここで、[job-spec]はdisown -h [job-spec]ようにジョブ番号(最初に実行したジョブの%1ようなものです。

これらは上の良い答えです、私はちょうど明確化を追加したい:

あなたは、pidやプロセスをdisownすることはできません、あなたは仕事をdisown 、それは重要な区別です。

ジョブとは、シェルに接続されているプロセスの概念なので、ジョブをバックグラウンドに投げ捨て(一時停止せずに)、ジョブを破棄する必要があります。

問題:

%  jobs
[1]  running java 
[2]  suspended vi
%  disown %1

Unix Job Controlの詳細については、 http://www.quantprinciple.com/invest/index.php/docs/tipsandtricks/unix/jobcontrol/を参照してhttp://www.quantprinciple.com/invest/index.php/docs/tipsandtricks/unix/jobcontrol/


なんらかの理由でCtrl + Zも動作していないと仮定して、別の端末に移動し、プロセスID( psを使用)を見つけて実行します。

kill -20 PID 
kill -18 PID

kill -20SIGTSTP )はプロセスを中断し、 kill -18SIGCONT )はバックグラウンドでプロセスを再開します。 これで、両方の端末を閉じることでプロセスが停止することはありません。


実行プロセスをnohupに送信するには( http://en.wikipedia.org/wiki/Nohup

nohup -p pid 、それは私のために働いていない

それから私は次のコマンドを試して、それは非常に正常に働いた

  1. いくつかのSOMECOMMANDを実行します。/ /usr/bin/python /vol/scripts/python_scripts/retention_all_properties.py 1

  2. Ctrl + Z押すと、プログラムを停止(一時停止)してシェルに戻ります。

  3. bgをバックグラウンドで実行します。

  4. ターミナルが閉じたときにプロセスがdisown -h終了されないようにします。

  5. exitを入力するとシェルから抜け出すことができます。これは、操作が独自のプロセスでバックグラウンドで実行されるようになったためです。シェルに結び付けられていないためです。

このプロセスは、 nohup SOMECOMMANDを実行するのと同じです。


実行中のジョブをシェルから分離するコマンド(= nohupにする)は、 disownと基本的なシェルコマンドです。

bash-manページ(man bash)から:

disown [-ar] [-h] [jobspec ...]

オプションがなければ、各ジョブのスペックはアクティブなジョブのテーブルから削除されます。 -hオプションを指定した場合、各ジョブ・スペックはテーブルから削除されませんが、シェルがSIGHUPを受け取った場合にSIGHUPがジョブに送られないようにマークされます。 jobspecがなく、-aオプションも-rオプションも指定されていない場合、現在のジョブが使用されます。 jobspecが指定されていない場合、-aオプションはすべてのジョブを削除またはマークすることを意味します。 jobspec引数を指定しないで-rオプションを指定すると、実行中のジョブに操作が制限されます。 jobspecが有効なジョブを指定しない限り、戻り値は0です。

つまり、単純なこと

disown -a

ジョブテーブルからすべてのジョブを削除し、それらをnohupにします


私のAIXシステムでは、私は試しました

nohup -p  processid>

これはうまくいった。 ターミナルウィンドウを閉じた後もプロセスは引き続き実行されました。 bgdisownコマンドが機能しないように、デフォルトのシェルとしてkshがあります。





nohup