linux - 如何获取管道另一侧的pid?

标签 linux perl bsd

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

[root@host ~]# command1 | command2 &

I've known command2's PID = 5912.

[root@host ~]# ls -l /proc/5912/fd/0 
lr-x------  1 root root 64 Mar 25 18:00 /proc/5912/fd/0 -> pipe:[540748072]
[root@host ~]# ls -l /proc/[0-9]*/fd/1 | grep 'pipe:\[540748072\]'
l-wx------  1 root root 64 Mar 25 18:01 /proc/5911/fd/1 -> pipe:[540748072]
[root@host ~]# cat /proc/5911/cmdline 
vmstat12

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

而且想知道有没有好的CPAN模块...

谢谢。

最佳答案

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

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

此外, parent 通常通过创建它们的系统调用来了解他们 child 的 PID。

关于linux - 如何获取管道另一侧的pid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430478/

相关文章:

linux - 即使插入证书后,永久链接仍指向 HTTP

linux - 如何在 Perl 中对字母数字键进行排序?

C网络编程?

c - 为什么 sendto() 返回 'Invalid argument' ?

error-handling - BSD校正可能吗?

php - 在 Linux 中编译 PHP 脚本

python - 从 python 运行 linux 命令

linux - 如何在 Linux 中使用 POSIX API 通过消息队列发送整数?

perl - 在 Perl 中通过网络发送二进制安全数据

regex - while、数组和正则表达式的组合