2

一个脚本while.sh对我来说很奇怪,它的内容是:

while [ 1 ];do
sleep 1
echo `date`
done

run as $while.sh >& while.log & (没有nohup or disown or setsid or double fork()) 退出再登录可以看到这个进程还在,ppid是1,tty是?

我的系统是rhel6(rhel5也是一样,bash

在 centos5.x 中它必须使用 nohup 或 disown 或在代码中执行 double fork()

rhel6 发生了什么

4

1 回答 1

1

是否设置了huponexitshell 选项?

$ shopt
...
huponexit      off

如果 Bash 自己收到 SIGHUP 信号,它将向其作业发送一个 SIGHUP 信号,但它不会在正常退出时向它们发送信号,除非您启用此选项。

值得一提的是,这在 RHEL6 和 RHEL5 上都被禁用了,至少在我刚刚测试的系统上是这样。我试过这个命令:

$ sleep 1000 &

当我注销并重新登录时它没有被杀死,除非我故意启用shopt -s huponexit.

于 2012-10-17T03:52:13.420 回答