【问题标题】:How to get the pid of the other side of pipe?如何获取管道另一端的pid?
【发布时间】:2011-07-22 18:37:26
【问题描述】:

我想知道管道另一端的 pid。如果是 Linux,我可以像这些命令一样匹配 ls -l /proc/SELF_PID/fd/0 的 id。

[root@host ~]# command1 |命令2 & 我知道 command2 的 PID = 5912。 [root@host ~]# ls -l /proc/5912/fd/0 lr-x------ 1 根 64 Mar 25 18:00 /proc/5912/fd/0 -> 管道:[540748072] [root@host ~]# ls -l /proc/[0-9]*/fd/1 | grep '管道:\[540748072\]' l-wx------ 1 根 64 Mar 25 18:01 /proc/5911/fd/1 -> 管道:[540748072] [root@host ~]# cat /proc/5911/cmdline vmstat12

在 Linux 上有更好的方法吗?或者如何在 BSD 和其他操作系统上运行?

我想知道有没有好的CPAN模块...

谢谢。

【问题讨论】:

  • 为什么你需要知道谁在听管道?
  • 我想用标准输入管道另一端的命令名来命名日志文件。
  • 但是如果我这样做 tee_log <some_file | command 呢?无法将文件描述符转换回文件名(例如,由于硬链接和符号链接,文件可能通过多个路径和名称访问)。
  • 我明白了。但我想自动设置日志文件名。或者我想知道解决这个问题的更好方法(获取管道另一侧的 pid)以供将来参考:) (可能存在管道打开的问题)超过2个进程..)
  • 我只是让用户传递一个文件名(或模式)作为参数,就像普通的tee 命令一样。

标签: linux perl bsd


【解决方案1】:

在 Perl 中,进程可以通过特殊变量 $$ 获取自己的 PID

如果您有一对管道或一个套接字,则每个进程都可以将自己的 PID 发送到管道或套接字中以供其他进程读取。

此外,父母通常通过创建它们的系统调用知道他们孩子的 PID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2012-08-25
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多