检查文件重定向是不健全的,因为nohup
可以(并且经常)在stdin,stdout和/或stderr已经明确重定向的脚本中使用.
除了这些重定向之外,唯一nohup
能做的就是忽略SIGHUP
信号(感谢Blrfl的链接.)
所以,我们真正要求的是一种检测是否SIGHUP
被忽略的方法.在Linux中,信号忽略掩模被暴露于/proc/$PID/status
,在结果的最低位显著SigIgn
十六进制字符串.
如果我们知道要检查的bash脚本的pid,我们可以使用egrep
.在这里,我看看当前的shell是否忽略SIGHUP
(即"nohuppy"):
$ egrep -q "SigIgn:\s.{15}[13579bdf]" /proc/$$/status && echo nohuppy || echo normal
normal
$ nohup bash -c 'egrep -q "SigIgn:\s.{15}[13579bdf]" /proc/$$/status && echo nohuppy || echo normal'; cat nohup.out
nohup: ignoring input and appending output to `nohup.out'
nohuppy
Run Code Online (Sandbox Code Playgroud)
您可以检查 STDOUT 是否与终端关联:
[ -t 1 ]
Run Code Online (Sandbox Code Playgroud)