从nohup文档中info coreutils 'nohup invocation'可以看出:
Exit status:
125 if `nohup' itself fails, and `POSIXLY_CORRECT' is not set
126 if COMMAND is found but cannot be invoked
127 if COMMAND cannot be found
the exit status of COMMAND otherwise
Run Code Online (Sandbox Code Playgroud)
但是,我从nohup获得的唯一退出代码是1和0.我有一个nohup命令在脚本中失败,我需要适当的例外...并且根据这个文档,我会假设nohup退出代码应该是126.相反,它是0.
我正在运行的命令是: nohup perl myscript.pl &
这是因为perl成功退出了吗?
Jon*_*ler 13
如果您的shell脚本运行以下过程:
nohup perl myscript.pl &
Run Code Online (Sandbox Code Playgroud)
你或多或少放弃了收集退出状态的机会nohup.如果shell分叉则整个命令成功为0,如果shell无法分叉则失败为1.在bash,您可以等待后台进程死亡并通过wait以下方式收集其状态:
nohup perl myscript.pl &
oldpid=$!
...do something else or this whole rigmarole is pointless...
wait $oldpid
echo $?
Run Code Online (Sandbox Code Playgroud)
回显$?通常是指定PID的退出状态(除非指定的PID已经死亡并等待).
如果同步运行该进程,则可以检测到不同的退出状态:
(
nohup perl myscript.pl
echo "PID $! exited with status $?" >&2
) &
Run Code Online (Sandbox Code Playgroud)
现在你应该能够发现不同的退出状态nohup(例如尝试不同的拼写错误:nohup pearl myscript.pl等).
请注意,子shell作为一个整体在后台运行,但是nohup在子shell中同步运行.