在我的服务器上,所报告的已使用 pty 的数量/proc/sys/kernel/pty/nr
正在不断增加。2.6.32
我怎样才能找出哪些进程正在使用 ptys,而无需一个接一个地终止它们并检查使用计数是否减少?
答案1
这似乎是一个Linux 内核1中的错误- 即使 ptys 被释放,计数器也不会减少。
在标准2设置中,ls /dev/pts
应该会显示当前分配的实际 pty,然后你可以运行lsof
在它们上面列出使用特定 pty(或任何其他文件)的所有进程。
1固定于Linux 3.2.
2單身开发实例。
答案2
尝试使用fuser
或lsof
查看哪个进程正在使用它们。
答案3
这表明你想要什么:
查找 /proc -maxdepth 1 -type d -name "[0-9]*" | 读取 f 时;执行 echo $(cat "$f/cmdline") " ${f:6} " $(readlink "$f/fd/0"); 完成
好吧,把它分解一下: - 查找 proc 中仅包含数字的所有目录 - 仅在 proc 中,没有子目录。按照惯例,这些只是进程 id。 - 而 read 读取每一行并存储在一个 shell 变量中(如果这是一个脚本,我会把它命名为 procpiddir 或类似的酷名字 - 它是 cli 所以我叫它一个简短的名字)。 - cmdline 文件告诉您运行了什么来生成该 pid(不完全是,但我们会使用它) - ${f:6} 是 bash 变量操作 - 基本上丢弃名称中的前 6 个字符 - 在这种情况下为'/proc/' - readlink 跟随链接到它的结论。由于 fd0 是 stdin(fd1 是 stdout,fd2 是 stderr),所以这会将您引导到运行该进程的 tty 才有意义。
没有充分的理由引用这些内容 - 这些变量不可能有空格或其他奇怪的字符。这只是习惯。哦,$(cmd) 使它看起来像命令的输出是一个 shell 变量(也许更熟悉 bash 的人应该更好地解释这一点或找到支持链接 - 这是据我所知)。