如何在没有按下的情况下发送CTRL + C?

时间:2017-04-22 20:44:33

标签: bash

我有一个脚本e。 G。 a.sh,调用脚本b.sh。

执行后,我希望b.sh在5秒后中断,然后再次执行。

任何想法,我怎么能运行它? 感谢

4 个答案:

答案 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