프로세스 목록에서 grep 제외 인 두 번째 PID도 반환합니다. 반환

실행중인 데몬의 프로세스 ID를 반환하는 명령을 함께 모았습니다.

ps aux | grep daemon_name | awk "{ print \$2 }"

완벽하게 작동하고 PID를 반환하지만 아마도 현재 실행중인 프로세스 인 두 번째 PID도 반환합니다. 반환 된 PID 목록에서 명령을 제외 할 수있는 방법이 있습니까?

몇 번 테스트 한 결과 내 명령이 항상 목록의 두 번째 PID 인 것처럼 보이지만 정확하지 않은 경우 첫 번째 PID 만 잡고 싶지 않습니다.



답변

grep -v스위치는 대기열에서 제외하고 결과를 반대로 바꿉니다. 따라서 다음과 같이 만드십시오.

ps aux | grep daemon_name | grep -v "grep daemon_name" | awk "{ print \$2 }"

Upd . -Cswitch를 사용하여 다음과 같이 명령 이름을 지정할 수도 있습니다 .

ps -C daemon_name -o pid=

후자 -o는 목록에서 원하는 정보 열을 결정합니다. pid프로세스 ID 열만 나열합니다. 그리고 =뒤에 등호 pid는 해당 제목에 대한 열 제목이 없음 을 의미하므로 명확한 숫자-PID 만 얻습니다.

이것이 도움이되기를 바랍니다.


답변

캐릭터 클래스 트릭을 사용할 수 있습니다. “[d]”는 “[d]”만 “d”와 일치하지 않습니다.

 ps aux | grep [d]aemon_name | awk "{ print \$2 }"

나는 이것을 사용하는 것을 선호한다 | grep -v grep.


답변

ps보다 안정적인 대안이 있으면 출력을 구문 분석하지 마십시오 .

pgrep daemon_name
pidof daemon_name

답변

ps -C옵션은 모든 Unix 기반 시스템에서 보편적 인 것은 아니지만 시스템에서 작동하는 경우입니다. 대신 나는 grep을 완전히 피할 것입니다.

ps aux | awk '/daemon_name/ && !/awk/ { print $2 }'

작은 따옴표로 이스케이프 할 필요가 없습니다. ps aux대부분의 유닉스 기반 시스템에서 전체 프로세스 목록을 제공하며 awk일반적으로 기본적으로 설치됩니다.


답변

pgrep이름으로 프로세스의 pid를 찾는 데 사용하십시오 .

pgrep proc_name

결과에 추가 프로세스 이름이있는 경우 ( -l) :

pgrep -l proc_name

프로세스 이름 ( -l) 및 인수 ( -f) 를 찾아 표시하십시오 .

pgrep -lf proc_name_or_argument

좋은 점 pgrep은 절대로 일치하는 것으로보고하지 않는다는 것입니다. 그러나 pid를 가져 와서 pgrep해당 프로세스를 by에 의해 죽일 필요는 없습니다 kill. pkill대신 사용하십시오 :

pkill proc_name

(기본적으로) 대신 SIGKILL신호 ( -9또는 -KILL)를 지정하십시오 SIGTERM.

pkill -9 proc_name

프로세스 이름 ( -l)과 인수 ( -f)를 찾고 신호 ( 또는 )로 프로세스를 -I종료하기 전에 확인 ( )을 요청하십시오 .SIGKILL-9-KILL

pkill -KILL -Ilf proc_name_or_argument

-I옵션은 pkillOS X Mavericks와 같은 일부 버전에서만 사용할 수 있습니다 .


답변

bash를 사용하는 경우 다음을 사용하여 다음을 수행 할 수도 있습니다. ps -eaf

PIDS=$(ps -eaf)
PID=$(echo "$PIDS" | grep "process_name" | awk '{print $2}')
echo $PID

답변

이 줄은 “grep”을 제외한 pid (프로세스 ID)를 돌려줍니다.

PID=$(ps aux | grep '/usr/bin/python2.7 manage.py SES__boto3_sqs_read' | grep -v grep)