我有一个bash脚本sleep_loop.sh
:
#!/bin/bash
for a in $(seq 1 100)
do
sleep 1000
done
echo after_loop
现在我使用命令bash sleep_loop.sh
运行此脚本。然后我打开另一个终端,获取sleep
进程的PID并将其存储在pid_of_sleep
中,然后运行kill -SIGTSTP $pid_of_sleep
。结果是作业bash sleep_loop.sh
暂停在原始shell中(可以使用fg
恢复),如预期的那样。
但是,如果我使用bash -i sleep_loop.sh
运行脚本,以便执行脚本的bash处于交互模式,并重复上述步骤将SIGTSTP
发送到sleep
进程,则整个脚本终止之前的原始终端回声after_loop
。因此,似乎在sleep
退出SIGTSTP
后,运行脚本的bash会突然出现。
以下是我的问题:
(1)在sleep
收到SIGTSTP
后,是什么原因导致bash在交互式和非交互式模式下表现不同?
(2)在交互模式下,为什么在sleep
收到SIGTSTP
之后,即使脚本不包含任何break
,bash也会在没有终止整个脚本的情况下突破循环声明?