【问题标题】:getting tty of caller in signal handler in php在 php 的信号处理程序中获取调用者的 tty
【发布时间】:2010-02-16 10:45:30
【问题描述】:

我刚刚为我的应用程序编写了 php 守护程序,并希望实现一些在指定信号 (SIGUSR1) 上生成的输出信息。我在代码中有信号处理程序

    pcntl_signal(SIGUSR1, array($this, 'signal_status'));

并准备好函数处理程序

  protected function signal_status($signal_number)
  { printf("blah\n"); }

除了一件事,一切都有效。当我向我的守护进程(posix_kill($pid, SIGUSR1) 甚至简单的 bash 中的kill -10 pid)发送信号时,我在控制台中得到了启动守护进程的输出。

是否可以获得调用者的文件描述符而不是守护进程的文件描述符?我不想将此数据发送到指定的输出(例如在 kill -10 PID 之后),而不是发送到守护进程的 FD。

希望我写的很清楚:)

【问题讨论】:

    标签: php daemon tty


    【解决方案1】:

    好吧,你不能,发送信号只是设置一些操作系统原语,它与设置你的守护进程和另一方面用于生成信号的工具之间的通信路径无关.您拥有的替代方法是观看守护程序的控制台输出,或者将守护程序转储状态转储到日志文件并创建某种实用程序来发送信号并打印日志文件(如果您要这样做,为什么不抛出完全取出日志文件并设置定期转储日志,因为信号不是进行进程间通信的礼貌方式。

    【讨论】:

    • 这就是我的想法,如果你能以某种方式获得“信号调用者”的 FD 并将数据直接转储到它(例如 /dev/pts/7),那就太奇怪了 - 无论如何感谢你的回答:)
    • 干净的解决方案是为你的守护进程提供某种真正形式的进程间通信(想想soap,想想rpc,想想在套接字上监听,想想使用管道,......)我不'不认为你可以识别信号的来源
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多