我正在学习 Red Hat 认证。书中指出,从 RHEL 7(Centos 最新版本也是如此)开始,如果您在后台启动进程,则不再需要使用 nohup,如果您终止父 shell,则启动的进程将不再被终止。
我尝试测试了这一点,发现了两种行为。如果我运行
sleep 3600 &
那么就像书中所说的那样,即使我杀死了父shell,我也会看到该进程正在运行。
如果我跑步(书中的例子)
dd if=/dev/zero of=/dev/null &
然后我杀死了父 shell,然后我就再也看不到该进程了。
谁能告诉我这是为什么吗?
答案1
我只是在 CentOS 7 上重复了您的示例,在这两种情况下,父 shell 被终止后,进程仍继续运行。以下是我所做的:
外壳 1
$ sleep 3600 &
$ exit
外壳 2
$ ps auxw | grep sleep
www 22268 0.0 0.0 107896 608 ? S 10:52 0:00 sleep 3600
外壳 3
$ dd if=/dev/zero of=/dev/null &
$ exit
外壳 1
$ ps auxw | grep dd
www 22294 101 0.0 107940 604 ? R 10:52 0:13 dd if=/dev/zero of=/dev/null
这是一种非常巧妙的行为,我在 RHEL 7 中没有注意到过。
多年来,我一直用screen
它来在后台运行长期存在的进程。我可能会继续使用它,因为能够重新连接到进程的输出以查找它可能生成的任何进度消息真是太好了。