특정 인수로 프로세스를 찾고 종료하는 배쉬 스크립트?


17

ssh-D 인수 (로컬 프록시 설정)로 실행되는 인스턴스를 종료하는 스크립트를 원합니다 .

수동으로, 나는 ps -A | grep -i ssh-D가있는 인스턴스와 kill -9 {id}각각을 찾습니다 .

그러나 그것은 bash 스크립트 형식으로 어떻게 생겼습니까?

(나는 Mac OS X에 있지만를 통해 필요한 명령을 설치합니다 port)


Mac OS X에서 pgrep 및 pkill 대안을 참조하십시오 ? . pgreppkill신뢰성 찾거나 솔라리스와 리눅스에서 이름으로 프로세스를 종료하는 명령입니다.
Gilles

답변:


26

실행 pgrep -f "ssh.*-D"하고 올바른 프로세스 ID를 리턴하는지 확인하십시오. 만약 그렇다면, 단순히 변경 pgreppkill동일한 옵션과 패턴을 유지

또한 kill -9프로그램이 종료되기 전에 SIGKILL을 정리하여 정리할 수 없기 때문에 반드시 필요한 경우가 아니면 일명 SIGKILL을 사용해서는 안됩니다 . 난 단지 사용하는 kill -9첫번째 시도 후 -1 -2-3.


당신은 각각에 대해 for루프 로 살인을 재정의해야합니다 ;)kill -ii
Seamus

1
pgrepOSX에 고유하지 않은 경우 타사에서 가져와야합니다. 주제에 대한 이전 스레드 에는 제안과 대안이 있습니다.
Gilles

살아있는 사람, 'nix를 많이 사용할수록 더 좋아합니다.
javamonkey79

pgrep 및 pkill은 OS X 10.8 (Mountain Lion) 이상에서 사용할 수 있습니다. apple.blogoverflow.com/2012/07/…
Peter Hanley

프로세스 ID뿐만 아니라 명령 (인수 포함)을 인쇄 하는 -a플래그 를 추가하는 것이 유용 할 수 있습니다 pgrep. 이렇게하면 원하는 프로세스 만 일치하는지 쉽게 확인할 수 있습니다.
luator


0

proc 파일 시스템을 활용하여 정보를 수집 할 수 있습니다. 예를 들면 다음과 같습니다.

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

완벽하지는 않지만 더 독점적 인 정규 표현식 (특히 프로세스를 종료하는 경우)을 원하지만 프로세스 echo $proc | awk -F'/' '{ print $3 }'의 PID를 표시합니다.


1
OSX에는이 없습니다 /proc. 그리고 이미 pgrep(적어도 Solaris 및 Linux에서 사용 가능 )이라고하는 강력한 도구가 있습니다.
Gilles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.