공유 메모리와 관련된 프로세스 나열

공유 메모리와 관련된 프로세스 나열

실행하면 ipcs -m다음 메시지가 나타납니다.

------ Shared Memory Segments --------
key     shmid      owner  perms  bytes   nattch status
0x00000 38699014   user   700    8125440 2      dest
0x00072 2064391    root   444    1       0
0x00000 38830088   user   700    299112  2      dest
0x00000 38862857   user   700    181720  2      dest
0x00000 38895626   user   700    244776  2      dest
0x00000 38928395   user   700    156816  2      dest

내가 원하는 것은 이러한 공유 메모리를 사용하여 프로세스(id)를 얻는 것입니다. 어떻게 얻을 수 있나요?

답변1

ipcs -m -p슈미드를 보여줘그리고이를 생성한 프로세스의 PID("cpid")입니다.

또한 "마지막 연산자" 또는 "lpid"라고 표시되어 있습니다. 그게 무엇인지 전혀 모릅니다(맨 페이지에는 이에 대한 내용이 나와 있지 않으므로 알아내려면 문서나 소스 코드를 파헤쳐야 합니다. 이는 미친 짓입니다. 에 대해 이야기하다!).

예를 들어, 내 시스템 중 하나(postgres 및 apache 등을 실행하는 경우)에서 다음을 수행합니다.

$ ipcs -m -p

------ Shared Memory Creator/Last-op PIDs --------
shmid      owner      cpid       lpid      
36         postgres   3155864    2367086   
38         root       14452      2362481   

(apache, pid 14452는 소유자 루트로 표시됩니다. 루트로 시작하지만 www-data다른 프로세스를 미리 분기할 때 변경됩니다.)

이를 사용하여 awk생성자 PID를 추출하고 xargs -n 1 pstree -p해당 PID를 표시하는 PID 트리로 연결할 수 있습니다.

참고: pstree한 번에 최대 하나의 PID 매개변수만 사용할 수 있으므로 xargs -n 1각 PID에 대해 한 번씩 실행해야 합니다.pstree

pstree -A예를 들어(ASCII 출력의 경우. 그렇지 않은 경우 터미널에서 약간 더 예쁘게 보일 수 있는 기본 선 그리기 문자를 사용하십시오 ):-A

$ ipcs -m -p | awk '$3 ~ /^[0-9]+$/ {print $3}' | xargs -n 1  pstree  -A -p
postgres(3155864)-+-postgres(1610942)
                  |-postgres(1620056)
                  |-postgres(1761109)
                  |-postgres(1831225)
                  |-postgres(1931537)
                  |-postgres(2123512)
                  |-postgres(2284745)
                  |-postgres(2386392)
                  |-postgres(3155867)
                  |-postgres(3155868)
                  |-postgres(3155869)
                  |-postgres(3155870)
                  |-postgres(3155871)
                  |-postgres(3155872)
                  `-postgres(3159321)
apache2(14452)-+-apache2(141263)
               |-apache2(762459)
               |-apache2(856005)
               |-apache2(856006)
               |-apache2(856008)
               |-apache2(856009)
               |-apache2(856010)
               |-apache2(856438)
               |-apache2(1369957)
               |-apache2(1777646)
               |-apache2(1887781)
               `-apache2(3746760)

원하는 경우 사후 처리(awk 또는 기타 도구 사용)하여 대괄호 내에서 PID만 추출할 수 있습니다.

그런데 출력 내용과 형식을 변경하는 데 사용할 수 있는 pstree다양한 유용한 옵션( -ushow uid 변환 및 전체 명령줄 표시 포함)이 있습니다.-a

cpid 및 lpid에 대한 pstree를 표시해야 하는 경우 다음을 사용하십시오.

$ ipcs -m -p | awk '$3 ~ /^[0-9]+$/ {printf "%s\n%s\n", $3, $4}' | xargs -n 1 pstree -p

관련 정보