Linux 如何在Bash中运行超时的进程?

Linux 如何在Bash中运行超时的进程?,linux,shell,timeout,Linux,Shell,Timeout,可能重复: 有没有一种方法可以编写一个shell脚本,执行某个命令15秒,然后终止该命令 我尝试过sleep、wait和ping,但可能我用错了。有些机器没有安装/可用的timeout。在这种情况下,您可以为流程设置背景;然后将其PID存储为$;然后睡眠所需的时间,然后杀死它: some_command arg1 arg2 & TASK_PID=$! sleep 15 kill $TASK_PID 目前,我发现有多种解决方案可以实现这一点。使用timeout命令: timeout 1

可能重复:

有没有一种方法可以编写一个shell脚本,执行某个命令15秒,然后终止该命令


我尝试过sleep、wait和ping,但可能我用错了。

有些机器没有安装/可用的
timeout
。在这种情况下,您可以为流程设置背景;然后将其PID存储为
$;然后睡眠所需的时间,然后杀死它:

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

目前,我发现有多种解决方案可以实现这一点。

使用
timeout
命令:

timeout 15s command

注意:在某些系统上,您需要安装
coreutils
,而在其他系统上,它缺失或具有不同的命令行参数。请参阅@ArjunShankar发布的替代解决方案。在此基础上,您可以封装锅炉板代码,并创建自己的便携式
超时
脚本或小型C应用程序来执行相同的操作。

通常使用报警信号并捕获它。但是命令实用程序看起来很有希望。谁认为这是离题的/更不用说,如果命令提前完成,它将立即返回
timeout
命令来自哪里?我在RHEL或Ubuntu服务器上都没有它。(或者在FreeBSD或OS X中)它在我的debian box上的coreutils 8.X中。任何FreeBSD、NetBSD、OS X、HP/UX、Solaris、AIX等都会缺少coreutils。在OS X上安装了自制的
coreutils
后,该命令可用作
gtimeout
我最初删除了我的答案(因为,很明显,Karoly的更棒),但似乎有些人没有
timeout
=>取消删除。