/tmp를 제외하고 "killall"과 함께 와일드카드를 사용할 수 없습니다.

/tmp를 제외하고 "killall"과 함께 와일드카드를 사용할 수 없습니다.

/tmp/bash.sh다음을 포함하는 스크립트 가 있습니다 .

killall name*

/tmp폴더 로 가서 실행하면 제대로 작동하지만, 그렇지 ./bash.sh않으면 실행하면 /작동 하지 않습니다. 오히려 불평한다/tmp/bash.sh./tmp/bash.sh

name*: no process found

왜? 이 문제를 어떻게 해결하나요?

답변1

killall유틸리티는 패턴을 사용하지 않으며 신호를 보낼 하나 이상의 프로세스 이름 목록이 필요합니다.

killall name*쉘이 인용되지 않은 파일 이름 와일드카드 패턴을 패턴과 일치하는 현재 디렉토리의 모든 파일 이름으로 확장한다고 말하면 name*어떻게 될까요 ?

/tmp이 패턴과 일치하고 종료하려는 프로세스에 해당하는 파일 이름이 있는 것 같습니다 .

일치하는 파일 이름이 없으면 /시스템의 디렉터리에 일치하는 파일 이름이 없는 것처럼 보이는 것처럼 쉘은 패턴을 확장하지 않습니다. 유틸리티 killall는 호출된 프로세스를 찾을 수 없으며 name*귀하가 질문에 보고한 방식으로 이에 대해 불평합니다.


기대한 대로 작동하는 유틸리티를 찾으려면 이 pkill유틸리티를 고려하십시오. 그것으로 당신은 할 수 있습니다확장 정규식이름을 맞춰보세요.

다음 코드는 TERM이름이 다음 문자로 시작하는 모든 프로세스에 신호를 보냅니다 name(이 패턴은 일반적으로 따옴표로 묶어야 합니다).

pkill '^name'

이름이 name정확히 일치하는 프로세스에 신호를 보냅니다 .

pkill '^name$'

아니면 더 나은,

pkill -x name

프로세스에 제공된 인수도 고려하려면 예를 들어 -f와 함께 옵션을 사용하고 다음을 입력하여 시작한 명령을 종료합니다 .pkillcatcat myfile

pkill -f -x 'cat myfile'

pkill설명서( ) 도 참조하세요 man pkill.

관련 정보