加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 设置-e和后台进程

发布时间:2020-12-15 21:49:24 所属栏目:安全 来源:网络整理
导读:在我的脚本中,我设置set -e以在发生错误时停止处理.它适用于在前台运行的所有命令,但我的一些命令必须在后台并行运行. 不幸的是,如果后台进程失败,尽管设置了-e标志,脚本也不会停止. 前台进程的示例有效. #!/bin/bashset -els -l no_filesleep 100 后台进程
在我的脚本中,我设置set -e以在发生错误时停止处理.它适用于在前台运行的所有命令,但我的一些命令必须在后台并行运行.
不幸的是,如果后台进程失败,尽管设置了-e标志,脚本也不会停止.

前台进程的示例有效.

#!/bin/bash
set -e
ls -l no_file
sleep 100

后台进程的示例不起作用.

#!/bin/bash
set -e
ls -l no_file &
sleep 100

如何处理后台进程的失败?

解决方法

异步启动命令(使用&)始终返回退出状态0.要获取命令的实际退出状态,请使用内置等待.一个简单的例子:

$(sleep 5; ls -l nofile) &
[1] 3831
$echo $?
0
$wait -n
ls: cannot access 'nofile': No such file or directory
[1]+  Exit 2                  ( sleep 5; ls --color=auto -l nofile )
$echo $?
2

等待-n等待任何子进程(这可能非常有用).如果你想等待一个特定的过程,你可以在启动时捕获PID – 它在特殊变量$中! – 然后等待PID:

$(sleep 5; ls -l nofile) &
$myjobpid=$!
$# do some other stuff in parallel
$wait ${myjobpid}
ls: cannot access 'nofile': No such file or directory
[1]+  Exit 2                  ( sleep 5; ls --color=auto -l nofile )

Bash手册的相关部分标题为“作业控制”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读