运行命令的执行时间有限

时间:2014-12-08 20:27:39

标签: python bash zsh

如果我通过命令行运行一些Python,比如说像这样:

cat <<'PYSTUFF' | python
print "Hi"
print "There"
print "Friend"
PYSTUFF

这很好用并输出REPL的响应。我想要做的是限制此命令的执行。例如,如果我写道:

cat <<'PYSTUFF' | python
while(True):
    print "Oh no!"
PYSTUFF

那将是不好的,最终会崩溃。我如何限制执行,说“如果这需要超过x的时间,杀死它。”?我尝试使用ulimit -t 2,但这似乎没有达到我想要的效果。

3 个答案:

答案 0 :(得分:1)

感谢@Biffen使用timeout命令完美运行。在Mac上,我使用了gtimeout。我的整个命令看起来像这样:

cat <<'PYSTUFF' | gtimeout 0.5 python
while(True): print("hi")
PYSTUFF

答案 1 :(得分:0)

  

限制此命令的执行。

从Python 2.6+开始,您可以使用multiprocessing模块:

cat <<'PYSTUFF' | python
from multiprocessing import Process
from time import sleep

def task():
    while True:
        print "oh no!"
        sleep(0.5)

p = Process(target=task)
p.start()
p.join(1)
print "*** Aborted"
p.terminate()
PYSTUFF

答案 2 :(得分:0)

如果你想从shell控制它,将python脚本启动到后台,睡一会儿,然后杀掉后台进程:

# a sample command that generates some output
{ while :; do date; sleep 1; done; } &

# let it run for a while, see if it's still running, and kill it if it is
sleep 10 && kill -0 $! 2>/dev/null && kill $!