我的 Linux 服务器中哪个进程正在消耗 ptys?

我的 Linux 服务器中哪个进程正在消耗 ptys?

在我的服务器上,所报告的已使用 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

尝试使用fuserlsof查看哪个进程正在使用它们。

答案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 的人应该更好地解释这一点或找到支持链接 - 这是据我所知)。

相关内容