如果使用管道调用程序PROG,
progA | progB | PROG | progC ...有没有办法让它知道它是在什么上下文中被调用的-例如,从/到什么其他程序(A,B,C...)它是接收还是发送管道输出?
我最感兴趣的是PROG的直接前身(在上面的示例中是progB),但也对更一般的问题感到好奇。
发布于 2013-06-25 22:15:00
如果您使用的是Linux,那么可以使用/proc filesystem检查命令是如何通过管道进行通信的。然而,这并不是真正的可移植性。
发布于 2013-06-25 22:24:36
您可以使用ps来显示具有相同父进程的所有进程。例如,如果PROG具有PID,则在Linux上可以执行以下操作:
ps --ppid $(ps -o ppid= $PID)以获取管道中所有命令的列表。(实际上,您将获得调用管道的shell的子级的所有命令,这可能就足够了。您可以检查每个进程的进程组,以确定哪些进程实际上在管道中。)它们打印的顺序不一定是它们在管道中出现的顺序,您可以在/proc/pid/fd中查看每个进程输入的inode,以确定它们是如何排列的。
https://stackoverflow.com/questions/17299360
复制相似问题