私は次のようなことをしています:
次のようなPerlスクリプトを実行します。
# First i install a signal handler for HUP which sets a global flag.
$SIG{"HUP"} = sub { print "HUP received\n"; $received_hup = 1 };
# Now i wait for HUP to be received.
my $cnt = 0;
for ($cnt = 0; $received_hup != 1 and $cnt < 900; $cnt++) {
sleep(1);
}
print ($received_hup == 1) ? "true" : "false";
次に、HUPをこのperlプロセスに送信します。
「HUPreceived」も毎回印刷されますが、falseが印刷されることがあります。つまり、シグナルハンドラが呼び出されても、グローバル変数は変更されません。
私はPerlの並行性の問題に精通していないので、これを教えてください。