다음과 같은 것을 사용하는 경우 호출 스크립트 test.py
와 pid 자체를 제외한 모든 Python 스크립트를 종료하기 위해 bash에서 명령을 실행하려면 어떻게 해야 합니까?grep
ps -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))
내부의 작업은 다음과 같습니다.
- test.py의 PID를 수집합니다.
pgrep test.py
grep -xv
수집된 목록에서 PID를 제외하는 위치 로 PID를 보냅니다 (-v
이-x
옵션은 전체 행(PID)과 일치함을 의미합니다).pgrep python
죽이고 싶은 파이썬 스크립트 목록을 수집하세요
원하는 Python 프로세스를 정확히 찾으려면 pgrep을 조정해야 할 수도 있지만 이것이 기본 구조입니다. 내부에서부터 다시 작업하여 상황에 맞게 조정하세요.
실행하여
pgrep test.py
예상한 PID를 정확히 찾는지 확인하세요.pgrep -f
더 확실하게 하려면 전체 프로세스 이름을 일치시키는 옵션을 참조하세요 .(또는 이와 유사한) 실행을 통해
pgrep python
종료하려는 "파이썬 스크립트"를 찾으십시오.함께 모아보세요!
답변2
ps
with 사용에 대한 일반적인 팁. 일반적으로 명령줄이 일치하는 것을 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자의 파일 이름에서만 작동한다는 것을 깨달았습니다.