创建孤儿进程

创建孤儿进程

使用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上例中的 不属于该进程集。

相关内容