특정 프로세스의 PID 및 상태를 얻는 방법

특정 프로세스의 PID 및 상태를 얻는 방법

1000부터 카운트다운하는 기본 쉘 스크립트를 만들었습니다. 이는 단지 테스트용이지만 모든 애플리케이션/프로세스가 될 수 있습니다.

##filename:test.sh##

#!/bin/bash
i=1000; while [ $i -gt 0 ]; do echo $i; i=`expr $i - 1`; sleep 1; done

나는 달리기 시작합니다 :

sh test.sh

이제 다음을 얻어야 합니다: a) 스크립트의 pid, b) 스크립트의 상태

만약 내가한다면

pidof sh test.sh 

그러나 여러 결과를 얻습니다.

달리기

ps aux | grep test.sh 

일부 종료됨(상태=T) 및 하나의 항목을 포함하여 여러 항목을 받았습니다 . 필요한 항목으로 grep test.sh제한하려면 어떻게 해야 합니까 (단지 하나의 인스턴스만 실행 중이라고 가정).pidof

나에게도 나라가 필요하다. 나는 실행하려고 :

ps aux | grep test.sh | ps -o stat --no-headers

그러나 그것은 작동하지 않았습니다. 상태를 얻었지만 여러 프로젝트에 대해

답변1

pidof -x test.sh그러면 PID를 얻는 데 필요한 정보가 제공됩니다.

매뉴얼 페이지에서,

-x 스크립트 - 프로그램이 지정된 스크립트를 실행하는 셸의 프로세스 ID도 반환하게 합니다.

이건 내 시험이야,

tony@trinity:~$ ls -l testit.sh
-rwxr-xr-x 1 tony tony 83 Jan  5 14:53 testit.sh
tony@trinity:~$ ./testit.sh
1000
999
998
997

동시에

tony@trinity:~$ ps -ef | grep testit.sh
tony      4233 20244  0 14:58 pts/5    00:00:00 /bin/bash ./testit.sh
tony      4295  3215  0 14:58 pts/6    00:00:00 grep --color=auto testit.sh

그런 다음

tony@trinity:~$ pidof -x testit.sh
4233

이후 쿼리는 일반적인 문제이며 한 가지 해결책은 다음과 같습니다.

ps aux | grep test.sh | grep -v grep

이렇게 하면 행이 하나만 제공됩니다( test.sh고유하다고 가정).

마지막으로, 최종 명령에서는 PID만 전달하는 것이 아니라 전체 텍스트 줄을 전달합니다. 이는 psPID를 얻는 방법도 아닙니다(PID는 뒤에 올 것으로 예상됩니다 -p).

예를 들어,

tony@trinity:~$ ps aux | grep testit.sh
tony      4233  0.1  0.0   4288  1276 pts/5    S+   14:58   0:00 /bin/bash ./testit.sh
tony      5728  0.0  0.0   3476   760 pts/6    S+   15:04   0:00 grep --color=auto testit.sh

따라서 grep을 실행한 다음 pid를 반환해야 합니다.

tony@trinity:~$ ps aux | grep testit.sh | grep -v grep | awk '{print $2}'
4233

그 다음에,

tony@trinity:~$ ps -o stat --no-headers -p $(ps aux | grep testit.sh | grep -v grep | awk '{print $2}')
S+

이를 달성하기 위한 덜 복잡한 방법이 많이 있을 수 있지만 저는 진행 상황을 보여주고 싶었습니다.

관련 정보