Jac*_*der 4 linux process ipc fifo unix-sockets
stdio
我正在尝试从其父进程外部访问进程的流。我已经找到了该/proc/[pid]/fd
目录,但是当我尝试时
$ cat /proc/[pid]/fd/1
Run Code Online (Sandbox Code Playgroud)
我收到一个No such file or device
错误。我确信它存在,正如 Dolphin(文件浏览器)所显示的那样。
我还碰巧注意到文件资源管理器将其列为套接字,并尝试按照此处的建议从中读取内容会产生类似的错误。这对我来说很奇怪,因为stdio
流通常是管道,而不是套接字,所以我不确定这里发生了什么。
我还想指出,这些进程是由同一用户启动的,并且尝试访问它也sudo
不起作用。如果这个问题看起来很幼稚,我深表歉意,但我真诚地感谢一些指导 - 也许有更好的方法来访问 stdio 管道?
小智 5
太长;博士;截至 2020 年,如果/proc/<pid>/fd/<fd>
是套接字,则无法执行此操作(或类似操作)。
进程的stdin、stdout、stderr可以是任何类型的文件,不一定是管道、常规文件等。它们也可以是套接字。
在 Linux 上,它们/proc/<pid>/fd/<fd>
是一种特殊的符号链接,它允许您从头开始打开文件描述符引用的实际文件,并且即使该文件已被删除,或者它在任何文件中都不存在,也可以执行此操作。文件系统(例如使用创建的文件memfd_create(2)
)。
但是套接字是一个值得注意的例外,它们不能以这种方式打开(也不明显如何实现:如果该 fd 是一个已连接的套接字,那么open()
on会创建另一个到服务器的连接吗?如果套接字是显式的怎么办?/proc/<pid>/fd/<fd>
绑定到本地端口?)。
最近版本的 Linux 内核引入了一个新的系统调用,pidfd_getfd(2)
它允许您从另一个进程“窃取”文件描述符,就像您能够通过 Unix 套接字传递它一样,但无需受害进程的协作。但这还没有在大多数 Linux 发行版中实现。
归档时间: |
|
查看次数: |
2739 次 |
最近记录: |