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

Ala*_*anF 111 linux shell timeout

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

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

我试过睡觉,等待和ping,但也许我错了.

Kar*_*ath 222

使用timeout命令:

timeout 15s command
Run Code Online (Sandbox Code Playgroud)

注意:在某些系统上,您需要安装coreutils,而在其他系统上则缺少它或具有不同的命令行参数.请参阅@ArjunShankar发布的替代解决方案.在此基础上,你可以封装该锅炉板代码,并创建自己的便携timeout脚本或小C的应用程序,做同样的事情.

  • 更不用说如果命令先前完成它会立即返回 (3认同)
  • 在OS X上使用自制软件安装的`coreutils`,该命令可用作`gtimeout` (3认同)

Arj*_*kar 58

有些机器没有timeout安装/可用.在这种情况下,您可以介绍该过程; 然后将其PID存储为$!; 然后睡觉所需的时间,然后杀死它:

some_command arg1 arg2 &
TASK_PID=$!
sleep 15
kill $TASK_PID
Run Code Online (Sandbox Code Playgroud)

这个URL我发现有提到的不止一个解决方案来实现这一点.

  • 我最初删除了我的答案(因为很明显,Karoly的内容真是太棒了),但似乎有些人没有"超时"=>未删除. (5认同)