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つのステップを実行できるために機能します。

答え2

まずpidを入手してください

ps aux | grep process_name私のために働く

次のように出力する必要があります。

root      2545  0.0  0.0  85128  3128 ?        Ss   Apr19   0:07 /usr/sbin/apache2 -k start
www-data  2569  0.0  0.0 2011388 10132 ?       Sl   Apr19   1:19 /usr/sbin/apache2 -k start
www-data  2570  0.0  0.0 2011380 10108 ?       Sl   Apr19   1:22 /usr/sbin/apache2 -k start
coteyr   23344  0.0  0.0  11748   928 pts/3    S+   10:12   0:00 grep --colour=auto apache

その後、あなたが望むようにすることkill 2545ができます。kill -9 2545

つまり、可能であれば kill を使用しないことをお勧めします。プロセスを終了するには、「正しい」方法を使用してください。多くの場合、ある種のバックグラウンドプロセスクリーンアップ機能が失われる可能性があります。しかし、時には他の方法がない場合もあります。

関連情報