如何从bash脚本获取进程标识和退出代码?

前端之家收集整理的这篇文章主要介绍了如何从bash脚本获取进程标识和退出代码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要一个bash脚本,执行以下操作:

>启动后台进程,将所有输出定向到文件
>将进程的退出代码写入文件
>返回进程的pid(立即,而不是当进程退出时)。
>脚本必须退出

我可以得到pid但不是退出代码

$ executable >>$log 2>&1 &
pid=`jobs -p`

或者,我可以捕获退出代码,但不能捕获pid:

$ executable >>$log;
# blocked on prevIoUs line until process exits
echo $0 >>$log;

我如何在同一时间做所有这些?

pid是在$ !,不需要运行作业。并且返回状态由等待返回:
$executable >> $log 2>&1 &
pid=$!
wait $!
echo $?  # return status of $executable

编辑1

如果我理解注释中所述的附加要求,并且希望脚本立即返回(不等待命令完成),那么将无法让初始脚本编写命令的退出状态。但是很容易让中间人在孩子完成后写出退出状态。就像是:

sh -c "$executable"' & echo pid=$! > pidfile; wait $!; echo $? > exit-status' &

应该工作。

编辑2

如在注释中指出的,该解决方案具有争用条件:主脚本在写入pidfile之前终止。 OP通过做轮询睡眠循环来解决这个问题,这是一个可憎的事,我担心我会在晚上睡觉,知道我可能已经激发了这样的耻辱。海事组织,正确的做法是等到孩子完成。因为这是不可接受的,这里是一个解决方案阻塞在读取,直到pid文件存在,而不是做循环休眠:

{ sh -c "$executable > $log 2>&1 &"'
echo $! > pidfile
echo   # Alert parent that the pidfile has been written
wait $!
echo $? > exit-status
' & } | read
原文链接:/bash/389245.html

猜你在找的Bash相关文章