一尘不染

限制程序在Linux中运行的时间

linux

在Linux中,我想运行一个程序,但只能运行有限的时间,例如1秒。如果程序超出此运行时间,我想终止进程并显示错误消息。


阅读 279

收藏
2020-06-07

共1个答案

一尘不染

StackOverflow不允许我删除答案,因为它已被接受。由于它在列表顶部,下面有一个更好的解决方案,因此它获得了否决票。如果您使用的是GNU系统,请timeout按照@wRAR的建议使用代替。因此,希望您停止投票,这是它的工作方式:

timeout 1s ./myProgram

您可以使用smhd为秒(如果省略默认值),分钟,小时或天。这里的一个有趣的功能是,如果不响应原始SIGTERM,则可以指定另一个选项-k 30s(在1s上述选项之前),以便在30秒后用SIGKILL杀死它。

一个非常有用的工具。现在向下滚动并向上投票@wRAR的答案。


为了后代,这是我最初的(次等的)建议,如果有人使用它可能仍然是。

一个简单的bash脚本应该可以为您做到这一点

./myProgram &
sleep 1
kill $! 2>/dev/null && echo "myProgram didn't finish"

那应该做到的。

$!扩展到最后一个后台进程(通过使用&),并且kill如果没有杀死任何进程,则kill返回false,因此仅在实际上杀死了某些东西的情况下执行echo。

2>/dev/null 重定向kill的stderr,否则它将打印出一些内容,告诉您它无法终止该进程。

您可能还想添加一个-KILL或任何您想用来摆脱进程的信号。

编辑(
Ephemenent指出),如果您的程序完成了,而其他进程抢走了pid,它就会被杀死,这是一场竞赛。为了降低发生这种情况的可能性,您可以对SIGCHLD做出反应,而不要尝试杀死它。仍然有机会消除错误的过程,但是它非常遥远。

trapped=""
trap 'trapped=yes' SIGCHLD
./myProgram &
sleep 1
[ -z "$trapped" ] && kill $! 2>/dev/null && echo '...'
2020-06-07