相关疑难解决方法(0)

Linux下如何从/proc/$pid/mem读取?

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呢?

linux process kernel memory proc

155
推荐指数
5
解决办法
14万
查看次数

谁有这个unix socketpair的另一端?

我想确定哪个进程具有 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 正在与哪个子进程通信。

process lsof open-files socket

68
推荐指数
5
解决办法
4万
查看次数

Bash 如何获取执行程序的输出?

例如,当我在Bash 中执行程序时[ls][2],它会将其输出发送到标准输出( fd &1)。并且执行程序的输出显示在终端中。Bash/终端如何获取ls命令的输出?

bash file-descriptors stdout

5
推荐指数
1
解决办法
3847
查看次数

我们如何从对方身上找出伪终端主从?

伪终端有一对主从。

我们如何从从设备文件(例如/etc/pts/3)中找出主设备文件?我只找到/dev/ptmxand /dev/pts/ptmx,但它们不能被多个奴隶共享。

给定一个进程在 master 和 slave 上工作,我们如何找出另一个?例如,ps提供有关每个进程的控制 tty 的信息。有帮助吗?

谢谢。

pty pts pseudoterminal

4
推荐指数
2
解决办法
1697
查看次数

在 shell 脚本中获取终端模拟器名称

我曾经使用pstree类似于以下内容的内容来查找运行 shell 脚本的父模拟器的名称:

pstree -s $PPID | awk -F '---' '{print $6}'

这适用于我当前的系统。我测试过mate-terminalxterm但不确定这是否适用于其他 Linux 系统/平台和其他终端。有没有更好/更整洁(更便携)的方法来实现这一目标?

linux terminal-emulator terminal shell-script processes

3
推荐指数
1
解决办法
2403
查看次数