CPU 정보를 제공하는 쉘 스크립트

CPU 정보를 제공하는 쉘 스크립트

누군가 나에게 다음 정보를 제공하는 쉘 스크립트 작성을 도와줄 수 있습니까?

  • 프로세스 상태
  • CPU에서 프로세스가 경과된 시간입니다.
  • 사용된 총 메모리(KB)
  • 열린 파일 설명자 수.
  • 프로세스를 시작하는 명령줄 - 이 프로세스에 의해 시작된 프로세스의 PID입니다.

JSON 형식이어야 하며 다음과 같아야 합니다.

{
    "pid" : 2714,
    "status" : "S",
    "usageCPU" : 1233,
    "usageMemoire" : 404,
    "numFD" : 12,
    "commande line" : "/bin/bash",
    "task" :
        [
            { "pid" : 2714 },
            { "pid" : 4230 }
] }

한 가지 더:

입력 매개변수:

프로그램은 다음 입력 매개변수를 사용합니다. - 정보를 원하는 프로세스의 pid. 요약하자면, 프로그램을 시작하려면 다음 명령이 필요합니다: ./your_program 2714

잘못된 형식

잘못된 pid 번호로 인해 필요한 정보를 찾을 수 없는 경우 다음 문자열이 반환됩니다: E_PID_NOT_FOUND

PS 저는 수학을 좋아하지만 이 글을 써야 하는데 어떻게 해야 할지 모르겠습니다.

답변1

대략 다음과 같습니다.

name_of_process=$1

ps aux\
 | grep $name_of_process\
 | grep -v "grep"\
 | awk '{print \"{\
     \"pid\" : $2,\
     \"status\" : $8,\
     \"usageCPU\" : $10,\
     \"usageMemoire\" : $4,\
     \"numFD\" : $some_field_num,\
     \"commandline\" : split($NF)[0]\
     \":[{ \"pid\" : $2},{\"pid\" : $some_field_num_too }]}'

그래서 나는 모든 프로세스와 해당 데이터의 목록을 제공하는 ps(플래그 포함 ) 호출을 효과적으로 수행하고 프로세스 이름이 포함된 행만 가져오기 위해 출력을 파이프 하고 출력을 다시 파이프로 파이프합니다. "grep"(신뢰)라는 문구를 찾는 대신 나, 필요함) 그리고 마지막으로 데이터(지금은 한 줄에 불과함)를 awk로 전송합니다.auxgrepgrep

그런 다음 awk는 데이터를 열별로 분할하고(기본 구분 기호는 TAB인 것 같습니다) awk의 $number 구문은 주어진 데이터의 열에 해당합니다.

numFD 및 ppid의 경우 기본적으로 인쇄되지 않기 때문에 해당 열이 무엇인지 알 수 없으므로 추가 플래그를 확인하여 어떤 옵션을 사용할 수 있는지 확인 ps하십시오 .aux

관련 정보