如何识别没有pid的进程?

Joh*_*Doe 59 networking security process

我有一个监听 2 个端口的进程:45136/tcp 和 37208/udp(实际上我认为它是同一个进程)。但 netstat 不返回任何 pid :

netstat -antlp | grep 45136
tcp        0      0 0.0.0.0:45136           0.0.0.0:*           LISTEN      - 
Run Code Online (Sandbox Code Playgroud)

结果与“grep 37208”相同。

我也试过 lsof :

lsof -i TCP:45136
Run Code Online (Sandbox Code Playgroud)

但它不会返回任何东西。这是squeeze的新安装,我真的不知道这个过程是什么。任何的想法 ?

ANSWER 感谢您的意见,我发现它是什么。我卸载了 nfs-server nfs-common(在 dkpg --get-selections | grep nfs 搜索之后)并且未知进程消失了。奇怪的是,内核进程没有以任何方式标记。

再次感谢你们两位。;)

slm*_*slm 84

网络统计

那里有一个过程,您的用户 ID 只是不知道它是什么。这是由lsof它提供的一层保护,使您看不到这一点。只需重新运行该命令,但使用该sudo命令为其添加前缀。

$ sudo netstat -antlp | grep 45136
Run Code Online (Sandbox Code Playgroud)

lsof在顶部的输出中甚至有关于此的警告。

(并非所有进程都可以识别,非拥有的进程信息将不会显示,您必须是 root 才能查看所有内容。)

例子

$ netstat -antlp | grep 0:111
tcp        0      0 0.0.0.0:111       0.0.0.0:*     LISTEN      -                   

$ sudo netstat -antlp | grep 0:111
tcp        0      0 0.0.0.0:111       0.0.0.0:*     LISTEN      1248/rpcbind
Run Code Online (Sandbox Code Playgroud)

SS

如果你没有任何运气,netstat也许ss会做。您仍然需要使用sudo,并且输出可能有点神秘。

例子

$ ss -apn|grep :111
LISTEN     0      128         :::111             :::*     
LISTEN     0      128          *:111              *:*     

$ sudo ss -apn|grep :111
LISTEN     0      128         :::111             :::*      users:(("rpcbind",1248,11))
LISTEN     0      128          *:111              *:*      users:(("rpcbind",1248,8))
Run Code Online (Sandbox Code Playgroud)

进程 ID 还是没有?

在某些情况下,根本没有与正在使用的 TCP 端口相关联的 PID。您可以在@derobert's answer 中阅读有关 NFS的信息,这就是其中之一。还有其他人。我有使用 ssh 隧道连接回 IMAP 等服务的实例。这些显示也没有进程 ID。

在任何情况下,您都可以使用更详细的形式,netstat其中可能会进一步阐明最终使用 TCP 端口的进程。

$ netstat --program --numeric-hosts --numeric-ports --extend
Run Code Online (Sandbox Code Playgroud)

例子

$ netstat --program --numeric-hosts --numeric-ports --extend |grep -- '-' | head -10
Proto Recv-Q Send-Q Local Address               Foreign Address             State       User       Inode      PID/Program name   
tcp        0      0 192.168.1.103:936           192.168.1.3:60526           ESTABLISHED root       160024310  -                   
tcp        0      0 192.168.1.1:2049            192.168.1.3:841             ESTABLISHED sam        159941218  -                   
tcp        0      0 127.0.0.1:143               127.0.0.1:57443             ESTABLISHED dovecot    152567794  13093/imap-login    
tcp        0      0 192.168.1.103:739           192.168.1.3:2049            ESTABLISHED root       160023970  -                   
tcp        0      0 192.168.1.103:34013         192.168.1.3:111             TIME_WAIT   root       0          -                   
tcp        0      0 127.0.0.1:46110             127.0.0.1:783               TIME_WAIT   root       0          -                   
tcp        0      0 192.168.1.102:54891         107.14.166.17:110           TIME_WAIT   root       0          -                   
tcp        0      0 127.0.0.1:25                127.0.0.1:36565             TIME_WAIT   root       0          -                   
tcp        0      0 192.168.1.1:2049            192.168.1.6:798             ESTABLISHED tammy      152555007  -             
Run Code Online (Sandbox Code Playgroud)

如果您注意到输出包含 INODES,那么我们可以使用此信息回溯到流程中。

$ find -inum 152555007
Run Code Online (Sandbox Code Playgroud)

这将向您显示一个文件,该文件可能会引导您进入一个过程。

参考


der*_*ert 20

另一种选择是套接字不属于进程,它属于内核。这方面的一个常见示例是 NFS。

Watt:~# netstat -ltp | egrep -- '-[[:space:]]*$'
tcp        0      0 *:nfs                   *:*                     LISTEN      -               
tcp        0      0 *:48131                 *:*                     LISTEN      -               
tcp6       0      0 [::]:55607              [::]:*                  LISTEN      -               
tcp6       0      0 [::]:nfs                [::]:*                  LISTEN      -               
Run Code Online (Sandbox Code Playgroud)

一般来说,我不确定识别这些的好方法。在 NFS 的特殊情况下,rpcinfo往往会告诉我们:

anthony@Watt:~$ rpcinfo -p | grep 48131
    100021    1   tcp  48131  nlockmgr
    100021    3   tcp  48131  nlockmgr
    100021    4   tcp  48131  nlockmgr
Run Code Online (Sandbox Code Playgroud)

不幸的是,这只适用于 IPv4。要获得 v6,您必须关闭-p,然后它会以一种愚蠢的方式显示端口号:作为 IP 地址的两个额外八位字节。端口 55607 因此变成217.55(因为217 ?×?256?+? 55 ?=?55607):

anthony@Watt:~$ rpcinfo  | grep -i 217.55
    100021    1    tcp6      ::.217.55              nlockmgr   superuser
    100021    3    tcp6      ::.217.55              nlockmgr   superuser
    100021    4    tcp6      ::.217.55              nlockmgr   superuser
Run Code Online (Sandbox Code Playgroud)