一時停止端末スクリプトを使用しておりSIGSTOP
、一時停止中であることを示すメッセージを印刷したいと思います。
- トラップができなかったのでbeforeを送信してキャッチしようとしましたが、トラップに入れたコマンド
SIGSTOP
は最終的にスクリプトが再開された後に実行されます。SIGUSR1
SIGSTOP
- との間に置くと
sleep
トラップコマンドが実行されますが、スクリプトは受信される前にしばらく実行されます。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
.seeSIGTSTP
の代わりに使用する必要があります。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