Linux - IPC 채널을 사용하여 프로세스 확인

Linux - IPC 채널을 사용하여 프로세스 확인

이것은 내 이전과 관련이 있습니다.질문.

Linux 시스템(예: sys V IPC)에서 IPC 채널에 대한 통계를 찾을 수 있다면 어떤 프로세스가 특정 IPC 채널을 사용하고 있는지 어떻게 알 수 있습니까(채널을 통해 전송, 수신기는 일반적으로 명령 출력에 언급됨).

예를 들어, ipcs머신의 공유 메모리 ID 목록을 알려주십시오. 이 공유 메모리를 사용하고 있는 프로세스를 어떻게 찾을 수 있나요?

내가 관심 있는 다른 IPC(통계를 찾는 데 사용하는 명령은 다음과 같습니다):

  • 관로:lsof | grep pipe
  • UNIX 도메인 소켓:netstat -n

답변1

을 사용할 수도 ipcs있지만 추가 옵션을 추가할 수 있습니다.

wouter@gangtai:~$ ipcs

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x0052e2c1 32768      postgres   600        56         20                      
0x00000000 17924097   wouter     600        33554432   2          dest         
0x00000000 49446914   wouter     600        524288     2          dest         
[...]
wouter@gangtai:~$ ipcs -i 17924097 -m -p

Shared memory Segment shmid=17924097
uid=1000    gid=1000    cuid=1000   cgid=1000
mode=01600  access_perms=0600
bytes=33554432  lpid=3808   cpid=1457   nattch=2
att_time=Fri Jul  3 10:43:28 2015  
det_time=Fri Jul  3 10:43:28 2015  
change_time=Fri Jul  3 10:03:00 2015  

lpid"마지막 방문자" PID는 cpid"작성자" PID입니다.

-i매개변수에는 확인하려는 IPC 개체(공유 메모리 세그먼트, 메시지 큐 또는 세마포어)의 ID가 필요합니다. 이 -m플래그는 메모리 세그먼트를 검사하고 -p프로세스 ID를 보려는 의미이기 때문입니다.

전체 내용을 확인하세요 man ipcs.

관련 정보