perl:用户输入阻止的线程终止

时间:2012-05-24 10:46:36

标签: multithreading perl signals

我已经制作了一个可以通过两种方式终止的程序,用户输入一个字符串say-“kill”或一个特定的线程信号SIGINT。

在这个终结器线程中,我有一个语句(捕获“kill”):

    $a = <>;

接着是'return;' 我在顶部也有适当的信号处理程序(对于INT):

print "signal received\n";
threads->exit(); 

但是在自动终止的情况下(即SIGINT是从其他线程发送的),无论我等多久,打印stmt都不会出现,直到我按下某个键。我想&lt;&gt;阻止。

有人可以告诉我如何向&lt;&gt;提供某种输入在汽车终止案件中,以便立即看到结果。

感谢。

1 个答案:

答案 0 :(得分:1)

您无法按照您尝试的方式执行此操作。如果正在读取文件,并且正在等待输入&#39;然后进程进入不间断等待状态。此时你基本上不能通过信号中断它。不间断等待是一个核心问题,关键是防止文件损坏。

要执行您尝试执行的操作,您可能需要使用IO::Selectcan_read功能。您可以在轮询循环中测试哪些文件句柄已准备好用于IO - 此轮询循环 可被kill信号中断。

或者,您可以使用Term::ReadKey代替使用文件句柄读取,这将允许您以非阻塞方式捕获按键