バックグラウンドプロセス(トラップ)に信号を送信できるのはどのくらい早いですか?


1

サブシェルで2番目のスクリプトを実行するスクリプトがあります。2番目のスクリプトに信号を送信できる最も早いのは何ですか?

script1:

./script2 &
kill -SIGCONT $!

script2:

echo "~~ ENTRY"

trap 'SUSPEND=false' SIGCONT

SUSPEND=true
while $SUSPEND; do; sleep 1; done

echo "~~ EXIT"

これは機能せず、ターミナルは「サスペンド」モードでハングします。私の推測では、killscript2を実行した後すぐに呼び出すため、script2のトラップには解析する時間がないため、何も起こりません-競合状態。

では、子プロセスにシグナルを送信できる最速の時間は何ですか-確実にトラップされますか?


予測する方法はありません。理論的には、システムが高優先度プロセスで十分にビジーである場合script2trapコマンドに到達しない可能性があります。
バーマー14

あなたができることはscript2、信号をトラップした後にファイルに書き込むようなことをすることです。script1ループして、ファイルの変更を確認できます。
バーマー14

回答:


1

名前付きパイプへのメッセージを、信号script2を処理する準備ができた信号として使用できます。

script1:

mkfifo /tmp/pipe
./script2 &
read nothing < /tmp/pipe
kill -CONT $!

script2:

echo "~~ ENTRY"

trap 'SUSPEND=false' SIGCONT
echo ready > /tmp/pipe

SUSPEND=true
while $SUSPEND; do; sleep 1; done

echo "~~ EXIT"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.