我在运行 Mac OS X 10.5 的机器上列出了一个进程(守护进程)的打开文件:
>lsof -p 89
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
xxxxx 89 xxxxxxxx 9u unix 0x34f8990 0t0 ->0x34f8880
我想找到一种方法来打开这个套接字并在其中写入。(这是我这次的痴迷..)
如何找到底层文件的 i-node/name 以到达该套接字?有没有办法从shell脚本以编程方式解决这个地址0x34f888?如果不是这样,如何以编程方式进行?
作为评论,我已经启动了 netstat 命令并得到了这个结果:
> netstat -u
Active LOCAL (UNIX) domain sockets
Address Type Recv-Q Send-Q Inode Conn Refs Nextref Addr
...
34f8990 stream 0 0 0 34f8880 0 0
...
34f8880 stream 0 0 0 34f8990 0 0
...
我不是网络/套接字专家。希望这可以提供更多信息
PS:老实说,我首先在 StackOverflow 上发布了这个问题(对不起,我暂时不认为 ServerFault 是第一眼),但似乎没有人给出答案。:/ 关于SO的相同问题
至少在 Linux 中,AF_UNIX 套接字可能未绑定到文件名、“未命名”(或“抽象”,在这种情况下,它有名称但与文件系统无关)。OS X 不太可能有所不同。有关详细信息,请参阅套接字函数绑定的手册页(或查看开发文档)。
无论如何,如果 OS X 具有 /proc 文件系统的等价物,您可以通过查看目标进程的文件描述符列表来获得套接字的句柄。YMMV。糟糕,它没有 procfs。请参阅有关Mac 特定解决方法的信息。
Unix 域套接字具有 inode,因此可以链接。您通常希望它们在文件系统中的某个位置显示为特殊文件。