Background-Process
Linux 通過 kill + PID 停止後台程序
這裡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-Z
的mc
程序(= 發送它SIGSTP
或SIGSTOP
= 暫停它(將在 shell 中顯示為“已停止”)),它將不會立即接收任何更多信號(除了SIGKILL
,但使用那個不是很好) 直到恢復。一旦你用 恢復它SIGCONT
,它就會接受你的SIGTERM
信號(以及在它被掛起時排隊等待它的信號)。kill -CONT $!; kill -TERM $! # $! refers to the pid of the last-spawned job
kill %1
之所以有效,是因為 shell 的內置kill
可能會在後台執行這兩個步驟。