如何使用'timeout'命令

时间:2017-05-10 21:26:30

标签: python linux bash timeout

因此,timeout可用于设置过程/命令的最终时间限制,如herehere所述。例如,timeout 300 sleep 1000将在300秒后返回提示,而不是1000.

但是有什么方法可以在进程仍在运行时动态修改此限制吗?所以这就是我要找的。

at time 0 : timeout 300 python long_run.py
at time 250 : <some way to extend the timeout limit by another 300 minutes or so>

我尝试了两种方法,但无法使其发挥作用。

通过GDB

我尝试使用gdb附加到timeout进程。它显示了以下调用堆栈,但我找不到一个变量,其值可以更新以增加时间限制。

(gdb) where
#0  0x00007f10b49f6e8c in __libc_waitpid (pid=15753, stat_loc=0x7fff0c799f30, options=0) at ../sysdeps/unix/sysv/linux/waitpid.c:31
#1  0x00000000004022d8 in ?? ()
#2  0x00007f10b4643f45 in __libc_start_main (main=0x401fc0, argc=4, argv=0x7fff0c79a0e8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff0c79a0d8)
    at libc-start.c:287
#3  0x0000000000402479 in ?? () 
0  0x00007f10b49f6e8c in __libc_waitpid (pid=15753, stat_loc=0x7fff0c799f30, options=0) at ../sysdeps/unix/sysv/linux/waitpid.c:31
31      ../sysdeps/unix/sysv/linux/waitpid.c: No such file or directory.
(gdb) p *(stat_loc)
$2 = 4204240

通过/ proc /

我们可以在/ proc // limits或stat文件中做些什么来更新timeout进程或子进程的超时限制。

1 个答案:

答案 0 :(得分:0)

根据Mark Plotnick非常有用的评论,将解决方案转化为问题。

解决方案1 ​​

kill -STOP停止进程,kill -CONT恢复进程。

因此kill -STOP pid_of_timeout将停止运行超时/计时器,而子进程将继续运行。我们可以在kill -CONT pid_of_timeout

之后恢复计数器

这意味着在计时器中添加一个延迟,比如说50,这样就可以了。

kill -STOP pid_of_timeout ; sleep 50 ; kill -CONT pid_of_timeout

解决方案2

将超时过程附加到gdb。它会冻结超时过程。完成后从GDB分离。

解决方案3

修改source code of timeout,编译并运行它而不是系统&#34;超时&#34;处理。