누군가 나에게 다음 정보를 제공하는 쉘 스크립트 작성을 도와줄 수 있습니까?
- 프로세스 상태
- 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로 전송합니다.aux
grep
grep
그런 다음 awk는 데이터를 열별로 분할하고(기본 구분 기호는 TAB인 것 같습니다) awk의 $number 구문은 주어진 데이터의 열에 해당합니다.
numFD 및 ppid의 경우 기본적으로 인쇄되지 않기 때문에 해당 열이 무엇인지 알 수 없으므로 추가 플래그를 확인하여 어떤 옵션을 사용할 수 있는지 확인 ps
하십시오 .aux