나는 애플리케이션의 프로세스 ID를 보고 싶을 때 이렇게 합니다 ps -aux | grep <application>
. 예를 들어 이렇게 하면 ps -aux | grep ssh
SSH의 프로세스 ID가 표시됩니다.
그런데 이렇게 하면 ps -aux | grep tcp
인터넷을 적극적으로 사용하고 있는데도 아무 것도 출력되지 않습니다.
TCP의 프로세스 ID를 확인하는 방법은 무엇입니까?
답변1
TCP는 프로세스가 아니라 커널 내부의 스택 또는 하위 시스템입니다. "프로세스 ID"가 없으므로 작업의 일부로 작업을 수행하는 커널 스레드에서는 그렇게 할 수 있습니다. TCP 스택 작업을 수행하는 데 필요한 작업은 여러 kthread, 사용자 공간 프로세스의 커널 스택 및 다른 곳에 분산됩니다.
예를 들어 컴퓨터에서 kworkers를 보려면 다음을 수행하십시오.
% pgrep -af kworker | head
24 kworker/1:0H-events_highpri
30 kworker/2:0H-events_highpri
36 kworker/3:0H-events_highpri
42 kworker/4:0H-kblockd
48 kworker/5:0H-events_highpri
54 kworker/6:0H-events_highpri
60 kworker/7:0H-events_highpri
120 kworker/1:1H-events_highpri
121 kworker/0:1H-kblockd
151 kworker/7:1H-events_highpri
그 중 일부는 특정 유형의 작업에 전념하고 다른 일부는 범위가 더 넓습니다. TCP 스택에는 네트워크뿐만 아니라 CPU 스케줄러, 메모리 및 기타 리소스도 포함되므로 커널의 여러 부분이 추상적으로 TCP 패킷 처리에 포함될 수 있습니다.
답변2
나는 당신이 ps -aux | grep ssh
SSH 포트(TCP 포트 22)의 시스템을 보고 그것이 일치한다고 생각했다고 가정합니다. 실제로 ssh라는 프로그램 이름과 일치합니다.
다음에 일어날 일은 실제로 당신이 무엇을 하고 싶은지에 달려 있습니다. TCP를 사용하여 모든 프로세스를 보려면 필요한 도구는 입니다 ss
.
ss -atnp
어쩌면 그게 당신이 쫓고 있는 것일 수도 있습니다. 그러면 모든 TCP 숫자 a
소켓과 이를 연 프로세스가 표시됩니다. 웹 서버나 SSH 서버와 같이 자신의 소유가 아닌 프로세스를 보려면 루트이거나 sudo를 사용해야 합니다.t
n
p
이 명령은 "누가 원격 사이트 X에 연결하고 있는지" 또는 "누가 포트 1234를 열었는지"와 같은 질문에 답합니다.