如何在BASH脚本中检查程序成功运行



我必须在bash脚本中运行一些程序。有时的程序可能不给出结果。

#!/bin/sh
for k in $( seq 1 20)
do
echo -n ${k}' ' >> 2.txt
./s${k}>>2.txt & sleep 5
done

我的理想结果:

1 result001
2 result002
3 
4 result004

但是在运行我的代码后,结果是

1 result001
2 result002
3 4 result004

所以我的问题是如何在bash脚本中成功检查程序运行?谢谢!

这应该对您有用。

 #!/bin/bash

    for k in {1..20}
    do
       result=$(./s${k} & sleep 5)
       printf "%b %bn" $k $result >> 2.txt
    done

测试此脚本时给出以下输出:

1 result1
2 result2
3 
4 result4

尝试使用wait

http://en.wikipedia.org/wiki/wait_(command)

等待[n]

其中n是当前执行背景的PID或作业ID 过程(作业)。如果不给出n,命令将等到所有作业 调用外壳已知已终止。

等待正常返回最后一个工作的退出状态 终止。如果n指定a,它也可能返回127 如果没有工作要等待。

因为等待需要注意当前外壳的工作表 执行环境,通常将其实现为内置的外壳。

只需在此行之后添加wait

./s${k}>>2.txt & sleep 5
wait

如果过程可以死锁 - 另一个选择是timeout

timeout -s 9 5 ./s${k}>>2.txt # Waits 5 seconds and then kill the process

您可以依次调用作业并使用timeout限制执行时间:

#!/bin/sh
for k in $( seq 1 20)
do
  echo -n ${k}' ' >> 2.txt
  timeout -k 8 5 ./s${k}>>2.txt
done

这将在5秒钟后用TERM信号(通过信号处理程序进行清理)终止每个作业,如果不成功,则在8秒后使用KILL信号。

但是,从您的外壳的角度来看,不涉及平行过程,您不需要解决任何并发问题。

相关内容

  • 没有找到相关文章

最新更新