이름으로 프로세스 종료

이름으로 프로세스 종료

저는 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와 같이 끝에 더 많은 숫자가 있을 수 있는 명령줄과 일치하지 않도록 해야 합니다 .20203

답변2

kill $(ps -ef | grep '[s]earch-string' | sed -re 's/[[:blank:]]+/\t/g' | cut -f2)

  1. ps -ef: 매개변수가 포함된 프로세스 목록 가져오기
  2. grep: grep이 자동으로 검색되는 것을 방지하려는 레코드를 필터링합니다 [].
  3. sed -re 's/[[:blank:]]+/\t/g': 공백을 단일 탭으로 변환
  4. cut -f2:PID 필드 추출

참고: ps이식성이 별로 좋지 않습니다. 하나는 posix용, 하나는 bsd용, 하나는 system-v용입니다. Gnu는 모든 사람과 호환되도록 노력하는 것 같습니다.

관련 정보