私の観察内容を適切に説明する文書が見つかりません。次のコードを実行した後、kill -SIGINT $my_pid
別のシェルで実行します。最初の2回は正確に見ます#### received trap 2
。ただし、wait
コマンドはすべての信号で中断されます。なぜ?
#!/bin/bash
for s in {0..64}
do
trap "echo '#### received trap $s'" $s
done
./code &
pid=$!
my_pid=$$
wait $pid
wait $pid
答え1
Bashが組み込み関数を介して非同期コマンドを待機しているときにトラップセットを持つ信号を受信する
wait
と、スタンバイ組み込み関数は128より大きい終了状態に即座に返され、次にトラップがすぐに実行されます。