在Linux的proc(5)
手册页告诉我,/proc/$pid/mem
“可用于访问进程的内存的页面”。但是直接尝试使用它只会给我
$ cat /proc/$$/mem /proc/self/mem
cat: /proc/3065/mem: No such process
cat: /proc/self/mem: Input/output error
Run Code Online (Sandbox Code Playgroud)
为什么不能cat
打印自己的内存(/proc/self/mem
)?当我尝试打印 shell 的内存时,这个奇怪的“没有这样的进程”错误是什么(/proc/$$/mem
显然进程存在)?那我怎么读/proc/$pid/mem
呢?
我想确定哪个进程具有 UNIX 套接字的另一端。
具体来说,我问的是用 来创建的socketpair()
,尽管任何 UNIX 套接字的问题都是一样的。
我有一个程序parent
可以创建一个socketpair(AF_UNIX, SOCK_STREAM, 0, fds)
, 和fork()
s。父进程关闭fds[1]
并保持fds[0]
通信。孩子反其道而行之,close(fds[0]); s=fds[1]
。然后孩子exec()
的另一个程序,child1
。两者可以通过这个 socketpair 来回通信。
现在,假设我知道parent
是谁,但我想弄清楚是谁child1
。我该怎么做呢?
有几种工具可供我使用,但没有一个可以告诉我套接字的另一端是哪个进程。我试过了:
lsof -c progname
lsof -c parent -c child1
ls -l /proc/$(pidof server)/fd
cat /proc/net/unix
基本上,我可以看到两个套接字以及关于它们的所有内容,但无法判断它们是否已连接。我试图确定父进程中的哪个 FD 正在与哪个子进程通信。
伪终端有一对主从。
我们如何从从设备文件(例如/etc/pts/3
)中找出主设备文件?我只找到/dev/ptmx
and /dev/pts/ptmx
,但它们不能被多个奴隶共享。
给定一个进程在 master 和 slave 上工作,我们如何找出另一个?例如,ps
提供有关每个进程的控制 tty 的信息。有帮助吗?
谢谢。
我曾经使用pstree
类似于以下内容的内容来查找运行 shell 脚本的父模拟器的名称:
pstree -s $PPID | awk -F '---' '{print $6}'
这适用于我当前的系统。我测试过mate-terminal
,xterm
但不确定这是否适用于其他 Linux 系统/平台和其他终端。有没有更好/更整洁(更便携)的方法来实现这一目标?