使用Ubuntu,我可以通过杀死命令后台进程的父进程来创建孤儿进程sleep 1000
吗?是否可以?
答案1
一般来说 - 是的。但是在你的情况下杀死父进程意味着杀死shell进程并终止会话,它也会导致linux向所有子进程发送SIGHUP信号并关闭它们。所以你可以先用 nohup 运行你的命令
nohup sleep 1000 &
现在你可以用kill杀死父shell更好的方法是只用于disown
你的后台进程而不是kill
答案2
你不能创建一个孤立进程,因为任何孤立进程都会立即被 pid == 1 ( ) 的进程采用init
——或者如果在 Linux 上,则被“subreaper”进程采用。
如果这就是您想要的,您可以通过从子 shell 将其作为异步/后台进程启动来实现(无需杀死任何人),使用(cmd ... &)
.
例子:
$ (sleep 9999 &)
$ pgrep -fa 'sleep 9999'
5435 sleep 9999
$ ps -o pid,ppid,cmd 5435
PID PPID CMD
5435 1 sleep 9999
SIGHUP
注意:当会话(即会话领导者)终止时,Linux 将向所有进程发送 a 的声明(来自另一个答案)是错误的。 Linux 和 bash 都只会SIGHUP
向选定的进程子集发送信号,而sleep
上例中的 不属于该进程集。