我正在使用 暂停终端脚本SIGSTOP
,并且希望它打印一条消息,表明它正在暂停。
SIGSTOP
,我尝试SIGUSR1
在 之前发送 aSIGSTOP
并捕获它,但是我放入陷阱的命令最终在脚本恢复后被执行。sleep
之间放置a ,则会执行 trap 命令,但脚本会在收到 之前运行一段时间。SIGUSR1
SIGSTOP
SIGSTOP
有没有一种方法可以让我从外部告诉我的脚本回显“我正在暂停”,然后立即停止?
编辑:我正在使用 bash。我的测试脚本只是:
trap "echo Paused" SIGUSR1
trap "echo Restarted" SIGCONT
while : ; do
echo `date`
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
我称之为“./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
Run Code Online (Sandbox Code Playgroud)
你应该使用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
Run Code Online (Sandbox Code Playgroud)
例子:
$ ./test_pause.sh & disown
[1] 18852
$ kill -TSTP 18852
PAUSED
$ kill -CONT 18852
CONTINUED
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
596 次 |
最近记录: |