2

如果PROG使用管道调用程序,

progA | progB | PROG | progC ...

有没有办法告诉它在什么上下文中被调用 - 即从/到它正在接收或发送管道输出的其他程序(A、B、C ...)?

我对PROG(在上面的示例中progB)的直接前身最感兴趣,但也对更一般的问题感到好奇。

4

2 回答 2

2

如果您在 Linux 上,您可以使用/proc文件系统来检查命令如何通过管道进行通信。但是,这并不是真正的便携。

于 2013-06-25T14:15:00.183 回答
2

您可以使用ps显示所有具有相同父进程的进程。例如,如果 PROG 有 pid PID,在 Linux 上你可以这样做:

ps --ppid $(ps -o ppid= $PID)

获取管道中所有命令的列表。(实际上,您将获得调用管道的 shell 的所有子命令,这可能就足够了。您可以检查每个命令的进程组以确定哪些实际上在管道中。)它们的顺序print 不一定是它们在管道中出现的顺序,您可以查看/proc/pid/fd每个进程输入的 inode 以确定它们如何排列。

于 2013-06-25T14:24:36.187 回答