停止したジョブとは、一時的にバックグラウンドに入れられて実行されなくなったが、まだリソース(システムメモリなど)を使用しているジョブです。そのジョブは現在の端末に接続されていないため、出力を生成できず、ユーザーからの入力を受信していません。
jobs
bash の組み込みコマンドを使用して、実行中のジョブを確認できます。おそらく他のシェルも同様です。例:
user@mysystem:~$ jobs
[1] + Stopped python
user@mysystem:~$
fg
(フォアグラウンド)bash組み込みコマンドを使用して、停止したジョブを再開できます。停止されたコマンドが複数ある場合、コマンドラインでを使用してjobspec numberを渡すことにより、再開するコマンドを指定する必要がありますfg
。1つのプログラムのみが停止している場合は、fg
単独で使用できます。
user@mysystem:~$ fg 1
python
この時点で、Pythonインタープリターに戻り、control-Dを使用して終了できます。
逆に、kill
jobspecまたはPIDのいずれかでコマンドを実行できます。例えば:
user@mysystem:~$ ps
PID TTY TIME CMD
16174 pts/3 00:00:00 bash
17781 pts/3 00:00:00 python
18276 pts/3 00:00:00 ps
user@mysystem:~$ kill 17781
[1]+ Killed python
user@mysystem:~$
jobspecを使用するには、数字の前にパーセント(%)キーを付けます。
user@mysystem:~$ kill %1
[1]+ Terminated python
停止したジョブでexitコマンドを発行すると、見た警告が表示されます。ジョブは安全のために実行されたままになります。それは、あなたがあなたがあなたが止めたのを忘れているかもしれない仕事を殺そうとしていることをあなたが知っていることを確実にするためです。exitコマンドを2回使用すると、ジョブが終了し、シェルが終了します。これにより、この方法で強制終了されることを意図していないプログラムで問題が発生する場合があります。
bashでは、logout
停止したプロセスを強制終了して終了するコマンドを使用できるようです。これにより、望ましくない結果が生じる可能性があります。
また、一部のプログラムはこの方法で終了したときに終了しない場合があり、それを行う習慣を付けると、システムがリソースを使い果たして孤立したプロセスを大量に終了する可能性があることに注意してください。
ユーザー入力が必要な場合に停止するバックグラウンドプロセスを作成できることに注意してください。
user@mysystem:~$ python &
[1] 19028
user@mysystem:~$ jobs
[1]+ Stopped python
Ctrl-z
割り込みで停止したジョブと同じ方法で、これらのジョブを再開および強制終了できます。