我有以下 bash 脚本,用于在文件夹中运行一些应用程序,每个应用程序 1 秒(用于测试):
#!/bin/bash
for app in ./*.app
do
myrunner $app &
sleep 1
killall -9 myrunner
done
但我认为使用“killall -9”并不是真正最好的方法,有更好的方法吗?
答案1
我想你想用timeout
,例如
timeout 1s myrunner $app
答案2
$!
是最后一个后台进程的pid,所以:
do
myrunner $app &
pid=$!
sleep 1
kill -9 $pid
done
您不必将其分配给那里的中间变量,因为sleep
没有后台,即您可以只使用kill -9 $!
.
有用的相关变量是$?
最后一个命令的退出状态,您可以通过以下方式获取 WRT 后台进程:
somecommand & wait $!
status=$?
答案3
你给你的测试对象 1s挂钟时间, 不是运行时间。这可以产生很大的不同。
为什么只运行固定时间,而不建立一些完成标准?这样就无法真正保证要测试的内容确实已完成(特别是如果稍后运行的测试时间较长的话)。