Background-Process

Linux 通過 kill + PID 停止後台程序

  • April 22, 2015

這裡https://unix.stackexchange.com/a/104825/109539 man 說要停止後台程序 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 終止 bg 程序

如果您C-Zmc程序(= 發送它SIGSTPSIGSTOP= 暫停它(將在 shell 中顯示為“已停止”)),它將不會立即接收任何更多信號(除了SIGKILL,但使用那個不是很好) 直到恢復。一旦你用 恢復它SIGCONT,它就會接受你的SIGTERM信號(以及在它被掛起時排隊等待它的信號)。

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

kill %1之所以有效,是因為 shell 的內置kill可能會在後台執行這兩個步驟。

引用自:https://unix.stackexchange.com/questions/197885