我有一个 Perl 脚本,它作为电子邮件服务器上的后台进程运行,并尝试通过对队列和日志文件的各种检查来检测受损的电子邮件帐户。我为 USR1 信号添加了一个处理程序,它使脚本在运行时打印一些关于它自己的信息。如果我在后台启动脚本然后发送 USR1 信号,这将非常有用,如下所示:
./myscript.pl & 杀死-USR1(PID)
问题是,如果我退出该 shell 会话然后再次连接,当我kill -USR1
再使用该命令时将无法获得任何输出,因为与脚本的 STDOUT 关联的 TTY 已消失。
所以,我想知道是否有办法获取在 Perl 中发送信号的用户或 shell 进程的 TTY,然后直接输出回 TTY 而不是 STDOUT。我尝试POSIX::ttyname(1)
在信号处理程序中使用,但它返回脚本 STDOUT 的 TTY(在本例中为空值),而不是发送 USR1 信号的用户的 TTY。
我在 POSIX 的 Perldoc 中看到,POSIX::sigaction
它将给出生成信号的进程的 PID 和 UID,但我不知道是否有一种从 Perl 中的信息中获取 TTY 名称的好方法。
任何帮助将不胜感激!谢谢!