我有产生两个线程的代码。第一个是启动应用程序的系统命令。第二个监视程序。我是 perl 线程的新手,所以我有几个问题......
my $thr1 = threads->new(system($cmd));
sleep(FIVEMINUTES);
my $thr2 = threads->new(\&check);
my $rth1 = $thr1->join();
my $rth2 = $thr2->join();
1)我需要第二个线程来监控程序吗?您可以将我对 &check 的子例程调用视为无限 while 循环,它检查文本文件中应用程序生成的内容。我可以这样做吗:
my $thr1 = threads->new(system($cmd));
sleep(FIVEMINUTES);
✓
2)我试图弄清楚我的父母在我运行这段代码后在做什么。因此,在我启动第 1 行之后,它将产生新线程,休眠,然后产生第二个线程,然后坐在第一个连接处等待。在第一次加入之前,它不会执行我的其余代码。这是正确的还是我错了?如果我错了,那它是如何工作的?
3)我的第一个线程启动应用程序的线程可能会被意外终止。当这种情况发生时,我没有什么可以捕捉到并杀死线程。它只是说:“线程 1 异常终止:在 myScript.pl 第 109 行调用了未定义的子例程 &main::65280。” 然后挂在那里。
我该怎么做才能让它结束其他线程?我需要它在程序结束之前发送一封电子邮件,我可以通过调用 &email (我制作的另一个子程序)来完成。
谢谢