2014-01-25 68 views
0

我正在尋找在shell中運行命令的最簡單方法,如果它在不到一秒的CPU時間內結束,就會將其殺死。喜歡的東西:運行時間受限的shell命令

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

$ deadline -- quick-foo 
Started fooing... 
Finished fooing! 

基於Linux的解決方案是綽綽有餘,但更便攜的人的歡迎。

回答

3

Coreutils的有timeout實用程序,做到了這一點,應該可以在大多數Linux發行版:

timeout - 有時間限制

先後爲使用何種信號選擇運行一個命令和其他一些事情。

+0

哇,這很快! –

3

另外的timeout(1)Mat's answer給出的,如果你想限制CPU time(不空閒時間或實時時間),你可以使用setrlimit(2)系統調用與RLIMIT_CPU(如果超過了CPU時間限制,你進程首先得到一個SIG_XCPU信號 - 它可以捕捉並處理 - 然後是一個SIG_KILL -uncatchable-信號)。此係統調用可在bash(1)中使用ulimit內置。

所以到CPU時間限制爲90秒(即1分30秒),鍵入

ulimit -t 90 
在終端

(假設你的殼是bash;具有zsh使用limit cputime 90,等...) - 然後所有進一步的命令是由限

閱讀也啓發time(7)signal(7)手冊頁的限制,並Advanced Linux Programming

1

氏s是快速和骯髒的,並且不需要任何軟件包來安裝,因此是便攜式的:

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