Linuxはkill + PIDを介してバックグラウンドプロセスを停止します。

Linuxはkill + PIDを介してバックグラウンドプロセスを停止します。

ここhttps://unix.stackexchange.com/a/104825/109539Manは、バックグラウンドプロセスを停止するにはkill + PIDを使用する必要があると言います。ただし、kill + PIDを使用してバックグラウンドプロセスを停止することはできず、kill + JOB IDのみを停止できます。

[KPE@home Temp]$ jobs
[KPE@home Temp]$ ps
  PID TTY          TIME CMD
13270 pts/0    00:00:00 bash
23257 pts/0    00:00:00 ps
[KPE@home Temp]$ mc &
[1] 23258
[KPE@home Temp]$ ps
                             PID TTY          TIME CMD
13270 pts/0    00:00:00 bash
23258 pts/0    00:00:00 bash
23262 pts/0    00:00:00 mc
23264 pts/0    00:00:00 ps

[1]+  Stopped                 . /usr/libexec/mc/mc-wrapper.sh
[KPE@home Temp]$ kill -s 15 23262
[KPE@home Temp]$ ps
  PID TTY          TIME CMD
13270 pts/0    00:00:00 bash
23258 pts/0    00:00:00 bash
23262 pts/0    00:00:00 mc
23266 pts/0    00:00:00 ps
[KPE@home Temp]$ kill %1
[1]+  Terminated              . /usr/libexec/mc/mc-wrapper.sh
[KPE@home Temp]$ ps
  PID TTY          TIME CMD
13270 pts/0    00:00:00 bash
23267 pts/0    00:00:00 ps
[KPE@home Temp]$ 

だから問題はpid killでbgプロセスを停止する方法です。

ベストアンサー1

C-Zプログラムが(mc=送信SIGSTPまたはSIGSTOP=一時停止した場合(シェルで「中止」と表示されます))、SIGKILL再開されるまで信号はすぐに受け入れられません(除外しますが、使用するのはうまくいきません)。再開すると、シグナル(一時停止中に待機しているシグナルも含む)をSIGCONT受け入れます。SIGTERM

kill -CONT $!; kill -TERM $! # $! refers to the pid of the last-spawned job

kill %1これは、シェルの組み込み機能がkill後でこれらの2つのステップを実行できるために機能します。

おすすめ記事