특정 프로세스 이름의 PID를 검색하고 종료합니다.

특정 프로세스 이름의 PID를 검색하고 종료합니다.

테스트 서버(로컬 애플리케이션)를 실행 중이고 해당 서버의 프로세스 ID를 가져와서 종료하고 싶습니다. 어떻게 하나요?

test-serverusing 명령을 실행하고 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-serverkill -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,commpid와 명령줄만 인쇄
  • awk필터링 test-server(이 부분을 조정해야 할 수도 있음(예: 명령줄 인수 필터링 대신 $3 ~ /test-server/사용 )argscomm

괜찮다면 실행하세요.

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사용법이 표시됩니다. 이것은 매우 영리합니다.

관련 정보