是否可以更改进程的父进程?如果是,如何?
例如,
如何screen
设法将会话screen
及其内部运行的进程附加到不同的 shell 进程?父进程有变化吗?
我似乎听说过其他更改程序运行的 shell 进程的方法,但我不记得了。程序的父进程是否也发生了变化?
我以为disown
在一个进程上改变了进程的父进程,只是因为名字disown
暗示了这一点。但我发现这不是真的。
Emacs 客户端可以在不同的终端选项卡上附加到 emacs 服务器。父进程有变化吗?
这个问题很老了,我仍然不清楚为什么。
2014 年的原始问题:
在 Gnome 终端选项卡中,我跑了
$ nohup chromium-browser &
Run Code Online (Sandbox Code Playgroud)
但是当我关闭终端选项卡时,chromium-browser
也会退出。不nohup
应该阻止吗?吉尔斯说:
nohup 和 disown 都可以说是抑制 SIGHUP,只是方式不同。nohup 使程序最初忽略信号(程序可能会改变这一点)。nohup 还尝试安排程序没有控制终端,以便在终端关闭时内核不会向它发送 SIGHUP。disown 纯粹是 shell 内部的;它会导致 shell 在终止时不发送 SIGHUP。
那么 nohup 不是让铬浏览器忽略 SIGHUP 吗?
我也在其他可执行文件上看到了这一点,例如 Emacs(GUI 模式)。但不是在 xeyes 上。
发布问题时,这发生在 32 位 Ubuntu 12.04 上。
2015年更新,
现在我运行的是 Ubuntu 14.04,google-chrome
而不是chromium-browser
安装。以前发生在 Chrome 浏览器上的事情现在也发生在 google-chrome 上。nohup google-chrome 2>/dev/null &
当终端选项卡关闭时,它不会被关闭。/usr/bin/google-chrome
是一个指向 bash 脚本的链接/opt/google/chrome/google-chrome
。为什么nohup
应用于 bash 脚本不起作用?我们如何让它在 bash 脚本上工作?Python脚本呢?