我有一个脚本e。 G。 a.sh,调用脚本b.sh。
执行后,我希望b.sh在5秒后中断,然后再次执行。
任何想法,我怎么能运行它? 感谢
答案 0 :(得分:1)
while true; do timeout 5 /path/to/b.sh; done
答案 1 :(得分:1)
CTRL + C正在发送SIGINT
命令。默认情况下,timeout
发送SIGTERM
信号,因此使接受的解决方案不准确。如果您确实要发送SIGINT
,则可以通过以下方式进行发送:
timeout -s SIGINT 5 b.sh
您还可以将不同的信号传递给timeout
命令。您可以通过执行kill -l
来查看所有列表。
您可以按照其他注释中的建议使用while
进行循环。
答案 2 :(得分:0)
您可以将调用置于循环中并在一段时间后使用timeout
来终止第二个脚本,例如
while true; do
timeout 5s b.sh
done
除非你真的不想让它无休止地循环,如果你只是希望它超时再执行一次:
timeout 5s b.sh
b.sh
答案 3 :(得分:0)
a
可以b
杀死-INT
。这几乎具有Ctrl-C
:
a_sh()
{
b_sh &
pid=$!
while :; do
sleep 5
kill -INT $pid
done
}
b_sh()
{
trap 'echo ouch' SIGINT #if this isn't here, b will die after 5 seconds instead of just saying 'ouch'
i=0;
while :; do
echo loop $i
sleep 1;
i=$((i+1))
done
}
a_sh