저는 일반적으로 몇 가지 Java 애플리케이션을 실행합니다. 하나는 로컬로 실행되는 서버에서, 다른 하나는 NetBeans와 같은 일부 IDE에서 실행합니다. 때로는 광범위한 재배포 후에 서버가 OutOfMemoryException에 걸리고 다시 시작하기 전에 Java 프로세스를 종료해야 합니다.
그래서 그렇게 했지만 pkill -9 java
, 내가 원하지 않았던 실행 중인 IDE도 종료되었습니다. 그렇다면 실행 중인 서버에 연결된 애플리케이션만 종료하고 다른 애플리케이션은 종료하지 않으려면 어떻게 해야 합니까? 나는 그것들이 모두 동일한 프로세스 하에서 실행되고 있다고 가정하고 있지만, 그것들을 구별할 수 있는 어떤 방법이 있어야 합니다.
답변1
여러 프로세스와 연결된 프로세스를 종료하려면 해당 프로세스와 연결된 프로세스 ID를 사용하여 프로세스를 종료해야 합니다.
실행 중인 Java 프로세스의 프로세스 ID를 가져옵니다.
ps -A |grep java
이 명령의 출력은 시스템에서 실행 중인 Java 프로세스 목록을 제공합니다. 종료하고 실행하려는 프로세스의 프로세스 ID(PID)를 기록해 둡니다.
kill -9 PID
답변2
IMO 최고의 솔루션은 다음과 같습니다.
pkill -9 -f <nameOfYourJavaAplication>
답변3
and 를 사용하는 대신 s 플래그를 사용하여 "java"라는 이름으로 나열된 모든 명령을 선택할 수 있습니다 ps
. 또한 의 플래그를 사용하여 나열된 각 프로세스의 전체 명령 이름을 인쇄할 수도 있습니다. 이렇게 하면 각 Java 프로세스가 실제로 수행하는 작업을 확인할 수 있습니다. 완전한 명령은 다음과 같습니다. .grep
ps
-C
ps
-f
ps -fC java
또한 이를 사용하여 pgrep
모든 Java 프로세스를 나열할 수도 있습니다. pgrep -a java
각 Java 프로세스의 PID 및 전체 명령줄이 반환됩니다.
종료하려는 명령의 PID가 있으면 이를 (SIGKILL) 플래그 및 종료하려는 Java 프로세스의 PID kill
와 함께 사용하십시오. -9
Java는 "SIGTERM" 신호 수신 시 항상 중지되지 않으므로(프로세스가 "SIGTERM"을 처리할 수 있도록 허용) "SIGKILL" 신호를 보내야 하는 경우가 많습니다. 이렇게 하면 init가 먼저 경고 없이 프로그램을 종료하게 됩니다.
예를 들어, ps -fC java
돌아오면
UID PID PPID C STIME TTY TIME CMD
jeff 9014 8890 0 08:51 pts/0 00:00:00 java IDE
jeff 11775 8890 6 08:59 pts/0 00:00:00 java TestProgram
또는 psgrep -a java
반환
9014 java IDE
11775 java TestProgram
누군가를 죽이고 싶다면 java TestProgram
도망쳐야 합니다 kill -9 11775
.
답변4
당신은 단순히 사용할 수 있습니다
jps -l
이 명령은 Java 프로세스의 모든 프로세스 ID를 가져온 다음 발행합니다.
죽이다프로세스 ID
주문하다