kill -9
때로는 Rails 서버를 종료하기 위해 최후의 수단으로 사용해야 할 때도 있습니다 . 안타깝게도 이 작업을 너무 자주 수행해야 하므로 이를 수행하기 위해 bash_profile에 도우미 함수를 작성했습니다.
이 작업을 수동으로 수행하면 ps aux | grep '[r]ails]
pid(예 12345
: ) 를 가져오고 kill -9 12345
서버가 종료되고 브라우저는 그대로 유지됩니다. 하지만 내 기능은 또한 브라우저를 종료시키고 싶지 않습니다.
function running {
ps -p $(lsof -i :3000 -t) &> /dev/null
}
function k9 {
if running
then
kill -9 $(lsof -i :3000 -t)
else
echo "Rails server is not running"
fi
}
lsof -i :3000 -t
얻은 pid가 내가 얻은 pid와 동일한 것을 확인했는데 ps aux
, 내가 뭘 잘못하고 있는 걸까요?
답변1
질문:
를 사용하면 lsof -i :3000 -t
포트 3000에 연결된 모든 프로세스를 찾을 수 있습니다.외딴옆.
스크립트를 사용하는 경우 브라우저는 포트 3000에서 Rails 서버에 연결되는 것으로 나타납니다. 차이점은 브라우저를 사용하는 것과 kill
.
이는 브라우저가 too 출력에 나열되고 lsof
종료됨을 의미합니다.
로컬이나 다른 곳에서 포트 3000을 사용하는 프로세스보다는 Rails 서버와 유사한 프로세스를 종료하는 것이 더 나을 것입니다.
일반 솔루션:
pkill
~이다올바른 도구작업.
~을 위한노력하다일치시킬 대상, 사용 pgrep
, 일치 방법은 동일합니다.
서버의 명령줄(ps에 표시된 대로)이 다음으로 시작하는 경우명령 이름서버 인스턴스를 식별하려면 다음 을 사용할 수 있습니다 pkill servercommand
.
명령줄매개변수는 를 추가합니다 . -f
예: .pkill -f serverargument
종료된 프로세스 pkill
만 나열되므로 pgrep
이를 사용하여 종료될 프로세스를 시도해 보세요. pid뿐만 아니라 명령줄을 나열하는 -a
옵션 을 추가합니다 .pgrep
pgrep / pkill의 예:
사용 예 -f
: 에 따르면 ps
다음 두 인스턴스가 xbindkeys
실행 중입니다.
$ ps aux|grep '[x]bindkeys'
26719 ? S 0:00 xbindkeys -f /tmp/xbindkeysrc-tmp
32046 ? S 0:00 xbindkeys -f /home/auser/.xbindkeysrc
이제 다음을 통해 두 인스턴스를 모두 찾을 수 있습니다.
$ pgrep xbindkeys
26719
32046
또는 다음 명령을 표시하세요.
$ pgrep -a xbindkeys
26719 xbindkeys -f /tmp/xbindkeysrc-tmp
32046 xbindkeys -f /home/auser/.xbindkeysrc
또는 명령줄 인수를 통해 인스턴스 중 하나를 일치시킵니다.
$ pgrep -f '/home/auser/.xbindkeysrc'
32046
그렇지 않은 경우 -f
일치하는 프로세스가 없습니다.
$ pgrep '/home/auser/.xbindkeysrc'
마지막으로 프로세스에 신호를 보냅니다 kill
. 예를 들면 다음과 같습니다.
$ pkill -f '/home/auser/.xbindkeysrc'
독창적인 접근 방식을 기반으로 한 대체 솔루션:
해결책은 pkill
더 일반적이지만 원래 접근 방식을 따르려면 lsof
다음 명령을 사용할 수 있습니다.더 엄격한
"어떤 방식으로든 로컬 포트를 사용하는 모든 프로그램 또는 어떤 방식으로든 원격 포트를 사용하는 모든 프로그램"이 아니라
"해당 포트를 수신하는 모든 로컬 서버" 와 일치합니다 .
이 옵션은 -sTCP:LISTEN
목록을 수신 포트로 제한하며 로컬 포트만 수신할 수 있으므로 로컬 포트만 수신할 수 있습니다.
if
다음과 같은 테스트 로 사용할 수 있습니다 .
if lsof -i :3000 -sTCP:LISTEN -t >/dev/null ; then
echo running
else
echo not running
fi
Kill -9에 표시된 대로 SIGKILL 사용에 대한 참고 사항:
KILL 신호는 다음 과 pkill
같은 방식으로 사용됩니다 kill
.
$ pkill -9 -f '/home/auser/.xbindkeysrc'
그러나 대부분의 경우 이는 기본 신호에 비해 이점을 제공하지 않으며 -15
어떤 경우에는 문제가 발생합니다. 그러니 습관으로 삼는 것은 좋지 않습니다.
보세요언제 -9 프로세스를 종료하면 안 됩니까?-9
기본값을 사용하고 싶지 않은 이유를 이해하십시오 .