我有一个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