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