如果使用管道调用程序PROG
,
progA | progB | PROG | progC ...
有没有办法告诉它在什么情况下被调用 - 即,从/到其他程序(A,B,C ...)接收或发送管道输出?
我最感兴趣的是PROG
的前任(在上面的示例中,progB
),但我也对更一般的问题感到好奇。
答案 0 :(得分:2)
如果您使用的是Linux,则可以使用/proc
filesystem检查命令如何通过管道进行通信。但是,这不是真正的便携式。
答案 1 :(得分:2)
您可以使用ps
来显示具有相同父级的所有进程。例如,如果PROG具有pid PID,则可以在Linux上执行以下操作:
ps --ppid $(ps -o ppid= $PID)
获取管道中所有命令的列表。 (实际上,您将获得调用管道的shell的所有子命令,这可能就足够了。您可以检查每个命令的进程组以确定哪些实际在管道中。)顺序他们打印的不一定是它们在管道中出现的顺序,你可以查看/proc/pid/fd
以查看每个进程的inode'输入以确定它们的排列方式。