是否可以从 bash(例如 python)运行一个带有终止时间的脚本,这意味着如果该脚本运行的时间超过 X 秒,则终止它?
答案1
是的,可以运行一个带有超时终止的 bash 脚本。你可以这样做:
1. 使用暂停:
它运行一个有时间限制的命令。一般语法包括:
timeout signal duration command/script arguments
在哪里 :
- signal 是信号名称或相应的编号。请参阅人 7 信号
- 持续时间是以数字指定的超时时间,后缀为
s
几秒钟后,m
几分钟后,h
用了几个小时 ,d
好几天。 默认值是秒,当您仅指定一个数字时。例如,假设您想在 2 分钟后终止脚本,那么:
timeout 2m /path/to/script arg1 arg2
NOTE
:默认超时信号是SIGTERM
有些进程不会终止。在这种情况下,我们需要使用SIGKILL
信号来终止该进程。timeout -s KILL 2m /path/to/script arg1 arg2
或者
timeout -k 30 2m /path/to/slow-command arg1 arg2
在这种情况下,timeout 首先
SIGTERM
在初始 2 分钟超时后发送信号。然后,等待另一个 30 秒超时,SIGKILL
如果进程仍在运行,则向进程发送一个。
2. 我没有timeout
命令 :
嗯,如果由于某种原因你无法使用,有很多替代方案或解决方法timeout
。这些是:
sleep
当时条件kill
:/path/to/script arg1 arg2 & sleep 2m ; kill $!
Perl 警报(可在顺序脚本中使用):
perl -e "alarm 120; exec @ARGV" "/path/to/script arg1 arg2"
使用预计命令 :
time_out=120 command="/path/to/script arg1 arg2" expect -c " set echo \"-noecho\"; set timeout $time_out; spawn -noecho $command; expect timeout { exit 1 } eof { exit 0 } "
请随意添加更多详细信息。