wRA*_*RAR 102
呃,好吧.timeout(1).
描述
启动命令,如果在DURATION之后仍然运行,则将其终止.
fal*_*tro 52
StackOverflow不允许我删除我的答案,因为它是可接受的答案.它正在赢得低票,因为它位于列表的顶部,下方有更好的解决方案.如果您使用的是GNU系统,请timeout按照@wRAR的建议使用.所以希望你停止投票,这是它的工作原理:
timeout 1s ./myProgram
Run Code Online (Sandbox Code Playgroud)
您可以使用s,m,h或d为秒(如果省略默认值),分钟,小时或天.这里的一个漂亮的功能是你可以指定另一个选项-k 30s(在1s上面之前),以便在另外30秒后用SIGKILL杀死它,如果它不响应原始的SIGTERM.
一个非常有用的工具.现在向下滚动并向上投票@ wRAR的回答.
对于后代来说,这是我原来的 - 低级的 - 建议,如果有人使用它可能仍然存在.
一个简单的bash脚本应该能够为你做到这一点
./myProgram &
sleep 1
kill $! 2>/dev/null && echo "myProgram didn't finish"
Run Code Online (Sandbox Code Playgroud)
应该这样做.
$!扩展到最后一个后台进程(通过使用&),如果它没有杀死任何进程,则kill返回false,所以只有在实际杀死了某些东西时才会执行echo.
2>/dev/null 重定向杀死的stderr,否则它会打印一些告诉你它无法杀死进程的东西.
您可能希望添加一个-KILL或任何您想要使用的信号来摆脱您的过程.
编辑
正如ephemient指出的那样,如果你的程序完成并且其他一些进程抢占了pid,那么就会有一场比赛,它会被杀死.为了减少它发生的可能性,你可以对SIGCHLD做出反应,如果发生这种情况,不要试图杀死它.仍有机会杀死错误的进程,但它非常遥远.
trapped=""
trap 'trapped=yes' SIGCHLD
./myProgram &
sleep 1
[ -z "$trapped" ] && kill $! 2>/dev/null && echo '...'
Run Code Online (Sandbox Code Playgroud)