次のスクリプトを考えてみましょう。
#!/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.