pid가없는 프로세스를 식별하는 방법은 무엇입니까?


47

45136 / tcp 및 37208 / udp의 두 포트를 수신하는 프로세스가 있습니다 (실제로 동일한 프로세스라고 가정합니다). 그러나 netstat는 pid를 반환하지 않습니다.

netstat -antlp | grep 45136
tcp        0      0 0.0.0.0:45136           0.0.0.0:*           LISTEN      - 

"grep 37208"와 동일한 결과입니다.

나는 lsof도 시도했다 :

lsof -i TCP:45136

그러나 아무것도 반환하지 않습니다. 스퀴즈의 새로운 설치이며 실제로이 과정이 무엇인지 모릅니다. 어떤 아이디어?

답변 귀하의 의견에 감사드립니다. nfs-server nfs-common (dkpg --get-selections | grep nfs 검색 후)을 제거하고 알 수없는 프로세스가 사라졌습니다. 커널 프로세스는 어떤 식 으로든 표시되지 않습니다.

다시 한번 감사합니다. ;)

답변:


57

netstat

거기에 프로세스가 있습니다. 사용자 ID는 그것이 무엇인지 볼 수는 없습니다. 이것은 lsof당신이 이것을 볼 수 없도록 제공하는 보호 계층입니다 . 간단히 명령을 다시 실행하고 sudo대신 명령을 사용하여 접 두부를 붙이십시오 .

$ sudo netstat -antlp | grep 45136

lsof상단 의 출력에 이것에 대한 경고조차 있습니다 .

(모든 프로세스를 식별 할 수있는 것은 아니며, 소유하지 않은 프로세스 정보는 표시되지 않습니다. 모든 프로세스를 보려면 루트 여야합니다.)

$ 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

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))

프로세스 ID가 아직 없습니까?

사용중인 TCP 포트와 관련된 PID가없는 경우가 있습니다. @ derobert 's answer 에서 NFS에 대해 읽을 수 있습니다 .이 중 하나입니다. 다른 것도 있습니다. ssh 터널을 사용하여 IMAP과 같은 서비스에 다시 연결하는 인스턴스가 있습니다. 이것도 프로세스 ID없이 표시됩니다.

어쨌든 netstatTCP 포트를 사용하는 프로세스에 대한 추가 정보를 얻을 수있는보다 자세한 형식을 사용할 수 있습니다.

$ netstat --program --numeric-hosts --numeric-ports --extend

$ 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  -             

출력에 INODES가 포함되어 있으면이 정보를 사용하여 프로세스를 추적 할 수 있습니다.

$ find -inum 152555007

프로세스로 연결될 수있는 파일이 표시됩니다.

참고 문헌


@derobert-나는 그들이 실이라고 생각했습니다.
slm

@slm (사용자 공간) 스레드에는 PID가 있습니다.
derobert

@derobert-그것이 내가 생각한 것이지만 확실하게 두 번 확인했습니다.
slm

@derobert-나는 이것을 발견했다 : "리눅스 커널 자체는 NFS 서버 (일명"knfsd ")를 제공한다. 따라서 커널은 프로세스가 아니기 때문에 연관된 프로세스가 없다."
slm

@JohnDoe-NFS와 관련이있을 수 있습니다.
slm

16

다른 옵션은 소켓이 프로세스에 속하지 않고 커널에 속한다는 것입니다. 이것의 일반적인 예는 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      -               

일반적으로이를 식별하는 좋은 방법은 확실하지 않습니다. NFS의 특별한 경우에, rpcinfo종종 우리에게 말할 수있을 것입니다 :

anthony@Watt:~$ rpcinfo -p | grep 48131
    100021    1   tcp  48131  nlockmgr
    100021    3   tcp  48131  nlockmgr
    100021    4   tcp  48131  nlockmgr

불행히도, 그것은 IPv4에서만 작동합니다. v6을 얻으려면 off 상태로 두어야합니다 -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

1
rpcinfo -pIPv4에만 적용되는 점을 지적 해 주셔서 감사합니다.
youfu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.