gpt4 book ai didi

unix - 如何从 nohup 获取正确的退出代码

转载 作者:行者123 更新时间:2023-12-04 16:46:22 31 4
gpt4 key购买 nike

来自 info coreutils 'nohup invocation' 中的 nohup 文档它指出:

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

但是,我从 nohup 获得的唯一退出代码是 1 和 0。我有一个 nohup 命令在脚本中失败,我需要适当的异常......并且基于这个文档,我会假设nohup 退出代码应该是 126。相反,它是 0。

我正在运行的命令是: nohup perl myscript.pl &
这是因为 perl 成功退出了吗?

最佳答案

如果您的 shell 脚本使用以下命令运行该进程:

nohup perl myscript.pl &

您或多或少放弃了从 nohup 收集退出状态的机会.如果 shell fork ,则整个命令以 0 成功,如果 shell 无法 fork ,则命令以 1 失败。在 bash ,您可以等待后台进程死亡并通过 wait 收集其状态:
nohup perl myscript.pl &
oldpid=$!
...do something else or this whole rigmarole is pointless...
wait $oldpid
echo $?

呼应 $?通常是指定 PID 的退出状态(除非指定的 PID 已经死亡并被等待)。

如果同步运行该进程,则可以检测到不同的退出状态:
(
nohup perl myscript.pl
echo "PID $! exited with status $?" >&2
) &

现在您应该能够从 nohup 中发现不同的退出状态。 (例如尝试不同的拼写错误: nohup pearl myscript.pl 等)。

注意子shell整体是在后台运行的,但是 nohup在子 shell 中同步运行。

关于unix - 如何从 nohup 获取正确的退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15650307/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com