如何解决获取已知进程ID的退出代码
我有一系列并行触发的进程列表。而且,我需要在完成所有这些进程时知道所有这些进程的退出代码,无需等待以完成所有进程。
status=$?; echo $status
将为最后执行的命令提供退出代码,但是我如何知道任何已完成的进程的退出代码,知道进程ID?
解决方法
您可以使用 GNU Parallel 来做到这一点,
parallel --halt=now,done=1 ::: ./job1 ./job2 ./job3
--halt=now,done=1
意味着完成任何一项作业后立即停止,立即杀死所有未完成的作业,并以完整作业的退出状态退出。
有一些选项可以在成功,失败或完成时退出。成功,失败或完成的作业数量也可以按百分比给出。请参阅文档here。
,使用包装程序外壳程序功能保存后台作业ID。之后,可以查询每个作业的退出状态:
#!/bin/bash
jobs=()
function run_child() {
"$@" &
jobs+=($!)
}
run_child sleep 1
run_child sleep 2
run_child false
for job in ${jobs[@]}; do
wait $job
echo Exit Code $?
done
输出:
Exit Code 0
Exit Code 0
Exit Code 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。