2012-05-24 105 views
0

我已經制作了一個程序,可以以2種方式終止,或者用戶輸入一個字符串say-「kill」或者一個特定的線程信號SIGINT。perl:線程終止被用戶輸入阻塞

在此終止線程我有一個聲明(趕上「殺」):

$a = <>; 

後跟一個回報;「 我有適當的信號處理程序(INT)太上不頂:

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

但在自動終止的情況下(即SIGINT從其他線程發送),打印語句不來,直到無論等待多久,我都按下一些鍵。我想<>正在阻止。

有人請告訴我如何在自動終止的情況下提供某種輸入到<>,以便立即看到結果。

謝謝。

+0

裏面調用到<>您的線程給控制操作系統。所以,是的,它阻止了一個eof。 – starbolin

+0

如果你想打破的話,你需要的不是line-i/o。 – starbolin

回答

1

你不能做你想做的事情,你嘗試做的方式。如果正在讀取一個文件,並且「待處理的輸入」,則進程進入不可中斷的等待狀態。你現在基本上不能通過信號中斷它。不間斷等待是一種內核事件,關鍵是防止文件損壞。

要做你想做的事情,你可能需要使用類似IO::Selectcan_read函數。您可以在輪詢循環中測試哪些文件句柄已準備好用於IO - 此輪詢循環可通過終止信號中斷。

或者,而不是使用一個文件句柄讀取,你可以使用Term::ReadKey,這將讓你捕獲一個按鍵在非阻塞的方式