是否可以更改流程的父流程?如果是,怎么办?
例如,
如何
screen
管理将会话screen
及其内部运行的进程附加到不同的Shell进程?上级流程有变化吗?我似乎听说过其他正在运行程序的Shell进程更改方式,但我不记得了。程序的父进程也有变化吗?
我认为
disown
某个流程会更改该流程的父流程,只是因为名称disown
暗示了这一点。但是我发现这是不正确的。Emacs客户端可以在另一个终端选项卡上连接到emacs服务器。上级流程有变化吗?
getppid(2)
,系统调用,并且系统调用由内核处理。可以通过发出该调用,保存该值,然后在其父项更改之后使用该值来混淆程序。这里有种族的机会。
disown
只是从shell的子进程内部列表中删除给定的子进程。孩子的PPID仍然是外壳的PPID。Shell忘记了它曾经启动过那个孩子,但是内核记住了。