我运行foreignprogram
并将输出传递给outputcatcher
。命令执行如下:
$ foreignprogram | outputcatcher
我想处理foreignprogram
中outputcatcher
的退出。退出foreignprogram
后,outputcatcher
也会退出。是否有outputcatcher
收到的信号,我可以处理它?我尝试了SIGINT,SIGTERM和SIGHUP,但到目前为止还没有运气。
ouputcatcher
是用PHP编写的,如果重要,我用pcntl_signal()来处理信号
答案 0 :(得分:0)
我认为这两个程序是两个独立的程序。
foreignprogram
无法知道谁将输出作为输入。除非你巧妙地实施。
但如果你知道foreignprogram
pid,那么
您可以做的一件事是,foreignprogram
,如果outputcatcher
正在运行,您可以检查每一秒。如果没有运行,那么您可以退出outputcatcher
。
尝试每秒从0
发送信号编号outputcatcher
并检查返回值。
我不确定如何在PHP中执行此操作。但我认为同样的事情将在bash
中完成。
kill -s 0 foreignpgram_pid
这将检查foreignpgram_pid
是否正在运行。
答案 1 :(得分:0)
我想出了这个解决方法:
$ foreignprogram | outputcatcher && exitcatcher
当exitcatcher
退出时,outputcatcher
会被执行,这意味着已退出foreignprogram
。不是一个优雅的解决方案,但有效。我不接受这个答案,仍在等待我要求的真实答案:)
在现实生活中,我想启动进程,解析其STDERR并将其发布到RabbitMQ。 outputcatcher
和exitcatcher
是相同的脚本,它接受第一个参数作为命令,第二个作为被监视进程的标识。像这样:
$ foreignprogram 2>&1 > /dev/null | catcher output 'foreignProgram' && catcher exit 'foreignProgram'