我正在寻找一种方法来运行x
秒的脚本,但仍有可能在x
秒过去之前中断它。
如果我不需要Ctrl-C的能力,我会写
./my_script &
sleep $x
kill $!
但是如果我在脚本中按Ctrl-C,那么fork会继续运行。
如果在子shell中启动,我知道如何杀死脚本:
trap "echo sub-script terminated" INT
(./my_script)
trap - INT
但我不知道如何将其转换为分叉(我不清楚我必须承认的两个概念之间的差异)。
编辑:我想知道解决方案有多便携,如果你能在答案中提到这一点,那对我来说是非常有价值的。
答案 0 :(得分:1)
timeout $x ./my_script
如果你有一个相当新的GNU Coreutils,那里包含timeout
。之前,曾经存在一些来自不同来源的稍微不兼容的timeout
变体(我在大多数地方都有来自最初IIRC的Postfix发行版)。
如果您的发行版没有timeout
,那么有许多shell和Perl黑客攻击。