/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
와 함께 옵션을 사용하고 다음을 입력하여 시작한 명령을 종료합니다 .pkill
cat
cat myfile
pkill -f -x 'cat myfile'
pkill
설명서( ) 도 참조하세요 man pkill
.