![이름으로 프로세스 종료](https://linux55.com/image/91173/%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EC%A2%85%EB%A3%8C.png)
저는 bash를 사용하여 다음과 같이 Python 프로그램의 여러 인스턴스를 시작합니다.
python example.py -id $i
$i
인스턴스에 할당된 ID는 어디에 있습니까? 모든 프로세스는 동일한 사용자에서 시작됩니다. 프로세스 ID를 추적할 수 없다고 상상해 보세요. 명령(ID 포함)을 호출하여 특정 인스턴스를 종료할 수 있습니까? 예를 들어, 이와 같은 것은 pkill 'python example.py -id 2'
분명히 작동하지 않습니다.
답변1
사용 pkill -fx
:
pkill -fx 'python example.py -id 2'
이 -f
옵션을 사용하면 pkill
프로세스 이름뿐만 아니라 전체 명령줄에서 일치가 발생하고 -x
패턴이 하위 문자열(예: )이 아닌 전체 명령과 정확히 일치하도록 강제됩니다 grep -x
. 또는 -x
와 같이 끝에 더 많은 숫자가 있을 수 있는 명령줄과 일치하지 않도록 해야 합니다 .20
203
답변2
kill $(ps -ef | grep '[s]earch-string' | sed -re 's/[[:blank:]]+/\t/g' | cut -f2)
ps -ef
: 매개변수가 포함된 프로세스 목록 가져오기grep
: grep이 자동으로 검색되는 것을 방지하려는 레코드를 필터링합니다[]
.sed -re 's/[[:blank:]]+/\t/g'
: 공백을 단일 탭으로 변환cut -f2
:PID 필드 추출
참고:
ps
이식성이 별로 좋지 않습니다. 하나는 posix용, 하나는 bsd용, 하나는 system-v용입니다. Gnu는 모든 사람과 호환되도록 노력하는 것 같습니다.