Killall은 이 터미널에서만 작동합니다.

Killall은 이 터미널에서만 작동합니다.

디버깅할 때 종종 killallkill 프로세스를 사용합니다. 시스템에서 동일한 이름을 가진 프로세스가 더 많이 실행될 수 있으므로 이는 실제로 나쁜 습관입니다.

일반적으로 내가 종료하려는 프로세스는 killall시작되었을 때와 동일한 부모(또는 조부모)의 자손입니다. 동일한 터미널이나 다른 탭(Konsole)의 터미널에서 시작된 프로그램을 종료하고 싶은 경우가 많습니다.

killall범위를 이 터미널에서 시작된 프로세스나 동일한(대) 부모의 하위 프로세스로 제한하도록 지시하는 방법(또는 다른 킬러)이 있습니까 ?

답변1

이 세션(현재 tty를 제어 터미널로 사용하는 프로세스)의 모든 프로세스를 종료하려면 다음을 수행하세요.

tty=`tty`; pkill -t "${tty#/dev/}"

아니면 더 간단합니다:

pkill -s 0

pkill(1)에 따르면:

-s, --session sid,...

 Only match processes whose process session ID is  listed.   Ses-
 sion ID 0 is translated into pgrep's or pkill's own session ID.

-t및 옵션은 모두 -s패턴 및 기타 옵션과 결합(AND)될 수 있습니다. pgrep -s0 -x foo이 세션에서 명명된 프로세스의 foo경우 불행하게도 그 pgrep중 어느 것도 pkill복잡한 - tcpdump스타일 술어를 지원하지 않습니다.

관련 정보