shell 只能向其作业发送信号,但不能向不是其作业的进程发送信号,这是否正确?
disown
将作业移出 shell 的作业列表。这是否意味着一个被拒绝的进程不会从其父 shell 接收所有信号(不仅仅是 SIGHUP)?如果它仍然会收到其他信号,为什么会这样呢?
答案1
您始终可以向您拥有的任何进程发送信号。外壳本身可能不会。
答案2
易于测试:
sleep
如果收到 SIGUSR1 就会死亡:
$ sleep 999 &
[1] 7399
$ kill -USR1 7399
$
[1]+ User defined signal 1 sleep 999
因此,让我们否认它,看看它是否能幸存:
$ sleep 999 &
[1] 7396
$ disown %1
$ jobs
$ ps -fp 7396
UID PID PPID C STIME TTY TIME CMD
schaller 7396 7360 0 19:59 pts/0 00:00:00 sleep 999
$ kill -USR1 7396
$ ps -fp 7396
UID PID PPID C STIME TTY TIME CMD
$