0

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

在这个终结者线程中,我有一个声明(捕捉“kill”):

    $a = <>;

后面跟着一个'return;' 我在顶部也有适当的信号处理程序(用于 INT):

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

但是在自动终止的情况下(即 SIGINT 是从其他线程发送的),打印 stmt 直到我按下某个键才出现,无论我等待多长时间。我想 <> 正在阻塞。

有人可以告诉我如何在自动终止的情况下向 <> 提供某种输入,以便立即查看结果。

谢谢。

4

1 回答 1

1

你不能做你想做的事,你想做的事。如果正在读取文件,并且“等待输入”,则进程进入不间断的等待状态。此时您基本上不能通过信号中断它。不间断等待是内核的事情,关键是防止文件损坏。

要做你想做的事,你可能需要使用类似IO::Selectcan_read函数的东西。您可以在轮询循环中测试哪些文件句柄已准备好进行 IO - 此轮询循环被终止信号中断。

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

于 2015-04-24T19:48:11.123 回答