我正在使用 暂停终端脚本SIGSTOP
,并且希望它打印一条消息,表明它正在暂停。
- 由于我无法捕获
SIGSTOP
,我尝试SIGUSR1
在 之前发送 aSIGSTOP
并捕获它,但是我放入陷阱的命令最终在脚本恢复后被执行。 - 如果我在和
sleep
之间放置,则会执行 trap 命令,但脚本会在收到 之前运行一段时间。SIGUSR1
SIGSTOP
SIGSTOP
有没有一种方法可以让我从外部告诉我的脚本回显“我正在暂停”,然后立即地停止?
编辑:我正在使用 bash。我的测试脚本只是:
trap "echo Paused" SIGUSR1
trap "echo Restarted" SIGCONT
while : ; do
echo `date`
sleep 1
done
我称之为“./blah.sh”。
我的控制脚本是:
script_id=`pidof -x blah.sh`
kill -SIGUSR1 $script_id
sleep 0.5
kill -SIGSTOP $script_id
sleep 2
script_id=`pidof -x blah.sh`
kill -SIGCONT $script_id
答案1
你应该使用SIGTSTP
而不是SIGSTOP
.看这里:
该
SIGSTOP
信号停止该过程。它不能被处理、被忽视、 或被阻止。该
SIGTSTP
信号是交互式停止信号。不同于SIGSTOP
此 信号可以被处理和忽略。
这是一个例子:
paused() {
echo PAUSED
kill -SIGSTOP $$ # This signal cannot be handled. Here the script is actually paused.
echo CONTINUED
}
trap 'paused' SIGTSTP
例子:
$ ./test_pause.sh & disown
[1] 18852
$ kill -TSTP 18852
PAUSED
$ kill -CONT 18852
CONTINUED