116

可能重复:
在给定超时后杀死子进程的 Bash 脚本

有没有办法编写一个 shell 脚本来执行某个命令 15 秒,然后终止该命令?

我尝试过睡眠、等待和 ping,但也许我用错了。

4

2 回答 2

235

使用timeout命令:

timeout 15s command

注意:在某些需要安装的系统上coreutils,在其他系统上它丢失或具有不同的命令行参数。请参阅@ArjunShankar 发布的替代解决方案。基于它,您可以封装该样板代码并创建自己的可移植timeout脚本或小型 C 应用程序来做同样的事情。

于 2012-04-19T09:17:34.637 回答
64

有些机器没有timeout安装/可用。在这种情况下,您可以后台处理该过程;然后它的 PID 被存储为$!; 然后休眠所需的时间,然后将其杀死:

some_command arg1 arg2 &
TASK_PID=$!
sleep 15
kill $TASK_PID

这个 URL上,我发现提到了不止一种解决方案来实现这一点。

于 2012-04-19T09:16:35.967 回答