为什么 pgrep 不显示我的进程,但 sudo pgrep 却显示?

为什么 pgrep 不显示我的进程,但 sudo pgrep 却显示?

我查看了进程列表并筛选出了ssh-agent正确显示我期望的 3 个进程:

$ ps -ef | grep ssh-agent
belmin   1051     1  0 16:05 ?        00:00:00 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
belmin   2569     1  0 16:09 ?        00:00:00 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
belmin   2655     1  0 16:09 ?        00:00:00 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
belmin   5093  2596  0 16:17 pts/1    00:00:00 grep --color ssh-agent

但是,如果我执行 a pgrep,它不会列出 3 个进程,除非我升级到sudo

$ pgrep -a ssh-agent

$ sudo !!
sudo pgrep -a ssh-agent
1051 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
2569 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
2655 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple

最初,我认为这是因为 PPID 为 1。但是,对于 PPID 为 1 的其他进程来说这不是问题,所以不是这样。

我在这里缺少什么?

更新:

因此,显然应用命名空间参数 ( --ns) 无需sudo--- 无论我提供什么命名空间:

$ for n in 'ipc' 'mnt' 'net' 'pid' 'user' 'uts'; do echo pgrep -a --ns $n ssh-agent; pgrep -a --ns $n ssh-agent; done
    pgrep -a --ns ipc ssh-agent
    12986 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
    pgrep -a --ns mnt ssh-agent
    12986 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
    pgrep -a --ns net ssh-agent
    12986 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
    pgrep -a --ns pid ssh-agent
    12986 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
    pgrep -a --ns user ssh-agent
    12986 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple
    pgrep -a --ns uts ssh-agent
    12986 ssh-agent -a /home/belmin/.ssh/.auth_sock.pineapple

目前还不清楚为什么。我会继续挖掘。

答案1

Procps 3.3.13 在命名空间上有 pgrep 过滤器。主要是这样 pkill 不会杀死其名称空间之外的内容。然而,对于某些进程,尤其是由于某种原因围绕 SSH 的进程,它会给出奇怪的结果。

3.3.14 已恢复此更改。

答案2

您可能已使用/proc选项集安装了文件系统hidepid。这是一项安全功能,旨在保护系统上其他用户的信息。请参阅man页面以proc获取完整信息。您可以通过执行grep proc /etc/mtab并查看结果是否包含 来检查是否是这种情况hidepid=2。您可以通过修改文件来更改设置/etc/fstab

相关内容