Gnome-terminalから、C-zでジョブを一時停止し、それをバックグラウンドに送信する機能を知っています。ターミナルを閉じてもプロセスは終了しません。仕事はどこから管理されているのですか、それとも失われていますか?
バックグラウンドジョブは、誰かがシグナルを送信して停止するように指示するまで実行を続けます。それが死ぬかもしれないいくつかの方法があります:
プログラムの実行を継続することが懸念される場合は、次のようにします。
Nohup
コマンド(Nohup myprogram --option somearg
)でプログラムを開始します。これにより、シェルがSIGHUPを送信せず、標準入力を/dev/null
にリダイレクトし、標準出力をリダイレクトします。 Nohup.out
というファイルの標準エラー。disown
があれば実行します。そうでない場合は、極端な偏見を持ってシェルを強制終了することで、シェルによるSIGHUPの伝播を回避できます(指定されたプロセスの終了トリガーをバイパスする、そのシェルからのkill -KILL $$
)。適切な信号を送信することで、ジョブをさらに制御できます(たとえば、kill
コマンドを使用)。
あなたはこれを試すことができます:
yes
)Ctrl + Z
pgrep yes
bg
またはfg
と同等):kill -CONT <PID>
、 どこ <PID>
は、前のステップで決定されたプロセスIDです。を押すと Ctrl+Z プロセスをバックグラウンドに送信せず、スリープに設定します。 fg
コマンド(フォアグラウンド)でウェイクアップできます。 Ctrl+ZSIGSTOP
(19)シグナルをプロセスに送信します。
あなたはこれを証明することができます:
yes running
を入力すると、ターミナルで「実行中」「実行中」「実行中」が繰り返し出力されますps
コマンドでPIDを探します。kill -19 the_previous_PID
、「yes」プロセスでも同じ効果が得られることがわかります。kill -l
と入力すると、使用できるすべての信号のリストが表示されます。