如何让脚本在暂停时回显某些内容?

如何让脚本在暂停时回显某些内容?

我正在使用 暂停终端脚本SIGSTOP,并且希望它打印一条消息,表明它正在暂停。

  • 由于我无法捕获SIGSTOP,我尝试SIGUSR1在 之前发送 aSIGSTOP并捕获它,但是我放入陷阱的命令最终在脚本恢复后被执行。
  • 如果我在和sleep之间放置,则会执行 trap 命令,但脚本会在收到 之前运行一段时间。SIGUSR1SIGSTOPSIGSTOP

有没有一种方法可以让我从外部告诉我的脚本回显“我正在暂停”,然后立即地停止?

编辑:我正在使用 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

相关内容