PID 얻기

PID 얻기

다음과 같은 것을 사용하는 경우 호출 스크립트 test.py와 pid 자체를 제외한 모든 Python 스크립트를 종료하기 위해 bash에서 명령을 실행하려면 어떻게 해야 합니까?grepps -ef |grep

pgrep python과 같은 것을 사용하여 grep 프로세스를 무시할 수 있을 것 같지만 test.py 스크립트를 어떻게 제외합니까? 그렇게 할 수 있는 옵션이 있다는 것을 알고 있습니다. grep -v그렇게 할 수 있는 옵션이 있습니까?pgrep -v

밝히다: grep 프로세스에 추가하여 - 이 작업을 수행할 때 ps -ef |grep test1.py이 결과를 가져오는 데 사용되는 grep pid도 얻음을 의미합니다. 결과가 표시되는 단계에서는 프로세스가 더 이상 존재하지 않기 때문에 종료하고 싶지 않습니다.

답변1

다음을 사용할 수 있습니다.

pkill $(pgrep python | grep -xv $(pgrep test.py))

내부의 작업은 다음과 같습니다.

  1. test.py의 PID를 수집합니다.pgrep test.py
  2. grep -xv수집된 목록에서 PID를 제외하는 위치 로 PID를 보냅니다 ( -v-x옵션은 전체 행(PID)과 일치함을 의미합니다).
  3. pgrep python죽이고 싶은 파이썬 스크립트 목록을 수집하세요

원하는 Python 프로세스를 정확히 찾으려면 pgrep을 조정해야 할 수도 있지만 이것이 기본 구조입니다. 내부에서부터 다시 작업하여 상황에 맞게 조정하세요.

  1. 실행하여 pgrep test.py예상한 PID를 정확히 찾는지 확인하세요. pgrep -f더 확실하게 하려면 전체 프로세스 이름을 일치시키는 옵션을 참조하세요 .

  2. (또는 이와 유사한) 실행을 통해 pgrep python종료하려는 "파이썬 스크립트"를 찾으십시오.

  3. 함께 모아보세요!

답변2

pswith 사용에 대한 일반적인 팁. 일반적으로 명령줄이 일치하는 것을 grep원하지 않습니다 .grep

ps -ef | grep '[t]est'

test명령줄에서는 일치하지만 test명령줄 자체에는 나타나지 않습니다 grep.

PID 얻기

ps -eo pid,comm | awk 'NF==2 && $2~"\\.py$" && $2!="test.py" { printf "%d ",$1; }'

방금 이것이 최대 16자의 파일 이름에서만 작동한다는 것을 깨달았습니다.

관련 정보