Linux 运行时间受限的shell命令

Linux 运行时间受限的shell命令,linux,shell,Linux,Shell,我正在寻找一种最简单的方法,在shell中运行命令,并在不到一秒钟的CPU时间内终止它。比如: $ deadline -- slow-foo Started fooing... [deadline] 1 sec deadline hit, killing and returning -1! $ deadline -- quick-foo Started fooing... Finished fooing! 基于linux的解决方案已经足够了,但欢迎使用更便携的解决方案。Coreutils有一

我正在寻找一种最简单的方法,在shell中运行命令,并在不到一秒钟的CPU时间内终止它。比如:

$ deadline -- slow-foo
Started fooing...
[deadline] 1 sec deadline hit, killing and returning -1!

$ deadline -- quick-foo
Started fooing...
Finished fooing!
基于linux的解决方案已经足够了,但欢迎使用更便携的解决方案。

Coreutils有一个实用程序可以实现这一点,应该可以在大多数linux发行版上使用:

超时
-运行有时间限制的命令

有使用什么信号和其他一些选项。

除了中给出的,如果您想限制(不是空闲时间或实时),您可以使用带有
RLIMIT\u CPU的系统调用(如果超过CPU时间限制,您的进程首先会收到一个
SIG\u XCPU
信号(它可以捕获并处理该信号),然后会收到一个
SIG\u KILL
-uncatchable-信号)。此系统调用在中与
ulimit
内置一起提供

因此,将CPU时间限制为90秒(即1分30秒)类型

在您的终端中(假设您的shell是
bash
;使用
limit cputime 90
,等等),那么所有进一步的命令都会受到该限制的约束


请同时阅读说明页和手册页,这是一种快速而肮脏的方法,不需要安装任何软件包,因此是可移植的:

TIMEOUT=1
YOURPROGRAM & PID=$! ; (sleep $TIMEOUT && kill $PID 2> /dev/null & ) ; wait $PID
TIMEOUT=1
YOURPROGRAM & PID=$! ; (sleep $TIMEOUT && kill $PID 2> /dev/null & ) ; wait $PID