SIGSTOPがスクリーンセッション内で機能しないのはなぜですか?

SIGSTOPがスクリーンセッション内で機能しないのはなぜですか?

次のスクリプトを考えてみましょう。

#!/bin/bash
OFILE='log'
echo 'ok' > ${OFILE}
kill -SIGSTOP $$
echo 'after stop' > ${OFILE}

対話型シェルではスクリプトが停止し、出力は次のokようになります。

screen -d -m ./test.sh

出力はafter stop画面処理信号ですか?スクリーンセッションでプロセスを一時停止する方法は?

ベストアンサー1

たぶん、画面プロセスが停止したbashプロセスを再開している可能性があります。以下を試しました(両方のプロセスにSIGSTOPシグナルを送信します)。

テストファイル

#!/bin/bash
OFILE='log'
echo 'ok' > ${OFILE}
echo 'screen pid ' $(screen -list | grep sc_test | cut -f1 -d'.' | sed 's/\W//g') >> ${OFILE}
echo 'test.sh pid ' $$ >> ${OFILE}
kill -SIGSTOP $(screen -list | grep sc_test | cut -f1 -d'.' | sed 's/\W//g')
kill -SIGSTOP $$
echo 'after stop' >> ${OFILE}

画面コマンド

screen -dmS sc_test ./test.sh

ログファイル

ok
screen pid  4453
test.sh pid  4454

リスト画面

screen -list
There is a screen on:
        4453.sc_test    (11/05/2015 10:45:20 AM)        (Detached)
1 Socket in /var/run/screen/S-root.

おすすめ記事