테스트 서버(로컬 애플리케이션)를 실행 중이고 해당 서버의 프로세스 ID를 가져와서 종료하고 싶습니다. 어떻게 하나요?
test-server
using 명령을 실행하고 nohup ./test-server &
있으며 다음을 사용하여 프로세스의 PID도 확인하고 있습니다.
ps -ef | grep 'test-server' | grep -v 'grep' | awk '{ printf $2 }'
산출:
svr-ser+ 42707 42618 0 10:43 pts/2 00:00:00 /bin/sh ./test-server
svr-ser+ 42709 42707 0 10:43 pts/2 00:00:00 /bin/sh ./test -Dserver_port=1099 -s -j test-server.log
svr-ser+ 42734 42709 9 10:43 pts/2 00:00:01 /usr/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -Dserver_port=1099 -s -j test-server.log
& 프로세스를 종료하려면 다음 명령을 사용하십시오.
ps -ef | grep 'test-server' | grep -v 'grep' | xargs kill -9
산출:
kill: cannot find process "svr-ser+"
Killed
어떻게 검색 42707
하고 종료할 수 있습니까? 프로세스 종료에 대해 매우 구체적으로 설명하고 싶습니다 ./test-server
. 그게 전부입니다.
답변1
에서 했던 것처럼 정규식을 통해 설명할 수 있는 이름의 PID를 얻으려면 에 표시된 대로 grep
간단히 를 사용하여 수행할 수 있습니다 .pgrep test-server
kill -9 $(pgrep test-server)
pkill
하지만 꼭 우회할 필요는 없습니다 pkill -9 test-server
.
답변2
노력하다
ps -e -H -o pid,comm | awk '$2 ~ /test-server/ { print $1}'
또는 그에 상응하는 POSIX:
ps -Ao pid= -o comm= | awk '$2 ~ /test-server/ { print $1}'
PID 확인
어디
-H
제목을 인쇄하지 마세요-o pid,comm
pid와 명령줄만 인쇄awk
필터링test-server
(이 부분을 조정해야 할 수도 있음(예: 명령줄 인수 필터링 대신$3 ~ /test-server/
사용 )args
comm
괜찮다면 실행하세요.
ps -Ao pid= -o comm= | awk '$2 ~ /test-server/ { print $1}' | xargs kill
답변3
이건 어때?
nohup ./test-server & echo "$!" >test-server.pid
그 다음에:
"$(<test-server.pid)"를 죽입니다.
또한, kill을 사용하면 SIGKILL
서버가 완전히 종료되지 않을 가능성이 높습니다. 대신에 SIGTERM
(에서 보낸 기본 신호 kill
)를 사용하세요.
답변4
-를 사용하여 killall
이름으로 프로세스를 종료합니다.
man killall
사용법이 표시됩니다. 이것은 매우 영리합니다.