我有一個Perl腳本,它作爲電子郵件服務器上的後臺進程運行,並嘗試通過對隊列和日誌文件進行各種檢查來檢測受感染的電子郵件帳戶。我爲USR1信號添加了一個處理程序,它使腳本在運行時輸出關於它自己的一些信息。如果我在後臺啓動腳本,然後發送USR1信號,像這樣這個偉大的工程:獲取以Perl發送信號的TTY
./myscript.pl & kill -USR1 (PID)
的問題是,如果我退出該shell會話,然後重新連接在,我不能得到任何輸出當我使用kill -USR1
命令時,因爲與腳本的STDOUT相關的TTY消失了。
所以,我想知道是否有一種方法來獲得發送Perl信號的用戶或shell進程的TTY,然後直接輸出回到TTY而不是STDOUT。我嘗試在信號處理程序中使用POSIX::ttyname(1)
,但它會返回腳本STDOUT的TTY(在這種情況下爲空值),而不是發送USR1信號的用戶的TTY。
我在Perldoc中看到POSIX指出POSIX::sigaction
會給出生成信號的進程的PID和UID,但我不知道是否有一種很好的方法可以從Perl中得到TTY名稱。
任何幫助將不勝感激!謝謝!
爲什麼不使用某種日誌文件來捕獲腳本的輸出:'./myscript.pl> some.log&',然後使用任何你喜歡的TTY中的'tail -f some.log'命令來監視它? – nab
這實際上是我的備用計劃。讓信號處理程序將信息寫入文件而不是TTY。我想從中得到的信息就像是正常運行時間,處理的消息數量等等,所以如果我可以根據需要獲取這些信息,而不是讓腳本在某個時間間隔定期記錄它,那將會更好。我想我可能需要編寫一個shell腳本來發送USR1信號,然後'cat'輸出文件,然後再刪除它。 – Dave