如何从bash脚本获取进程标识和退出代码?
发布时间:2020-12-15 09:08:55 所属栏目:安全 来源:网络整理
导读:我需要一个bash脚本,执行以下操作: 启动后台进程,将所有输出定向到文件 将进程的退出代码写入文件 返回进程的pid(立即,而不是当进程退出时)。 脚本必须退出 我可以得到pid但不是退出代码: $ executable $log 21 pid=`jobs -p` 或者,我可以捕获退出代码
我需要一个bash脚本,执行以下操作:
>启动后台进程,将所有输出定向到文件 我可以得到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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |