2 つのスレッドを生成するコードがあります。1 つ目は、アプリケーションを起動するシステム コマンドです。2 つ目は、プログラムを監視します。私はperlスレッドが初めてなので、いくつか質問があります...
my $thr1 = threads->new(system($cmd));
sleep(FIVEMINUTES);
my $thr2 = threads->new(\&check);
my $rth1 = $thr1->join();
my $rth2 = $thr2->join();
1) プログラムを監視するために 2 つ目のスレッドが必要ですか? &check への私のサブルーチン呼び出しは、アプリケーションが生成するものについてテキスト ファイルをチェックする無限の while ループと考えることができます。これを行うことができますか:
my $thr1 = threads->new(system($cmd));
sleep(FIVEMINUTES);
✓
2) このコードを実行した後、親が何をしているのかを把握しようとしています。したがって、1 行目を起動すると、新しいスレッドが生成され、スリープ状態になり、次に 2 番目のスレッドが生成され、最初の結合に座って待機します。その最初の結合で結合するまで、残りのコードは実行されません。これは正しいですか、それとも間違っていますか? 私が間違っている場合、それはどのように機能しますか?
3)アプリケーションを起動する最初のスレッドが予期せず強制終了される可能性があります。これが発生した場合、それをキャッチしてスレッドを強制終了するものは何もありません。「スレッド 1 が異常終了しました: 未定義のサブルーチン &main::65280 が myScript.pl 行 109 で呼び出されました。」そしてそこにぶら下がります。
他のスレッドを終了させるにはどうすればよいですか? プログラムが終了する前に電子メールを送信するためにも必要です。これは、 &email (私が作成した別のサブルーチン) を呼び出すだけで実行できます。
ありがとう