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