하나의 Java 프로세스 만 종료


17

나는 일반적으로 Java 응용 프로그램을 거의 실행하지 않습니다. 하나는 로컬로 실행되는 서버이고 다른 하나는 NetBeans와 같은 일부 IDE입니다. 그리고 때때로 많은 재배치 후 서버가 OutOfMemoryException에 걸리므로 재부팅하기 위해 Java 프로세스를 종료해야합니다.

그래서 나는 pkill -9 java하지만 이것은 또한 원하지 않는 실행중인 IDE를 죽입니다. 다른 서버가 아닌 실행중인 서버에 연결된 응용 프로그램 만 어떻게 죽일 수 있습니까?


2
(통해 프로세스 테이블을보고 topps) 오른쪽 하나를 선택하고 PID (살인 -9 PID_number)하여 죽인다.
8:13에

네, 지금 볼 수 있습니다. 그래서 그냥 right로 프로세스를 종료해야합니다 PID. 감사합니다
Petr Mensik

이것을 자동화해야합니다. 특정 프로그램의 PID를 얻는 방법?
Nikhil VJ

답변:


23

여러 프로세스와 연관된 프로세스를 종료하려면 해당 프로세스와 연관된 프로세스 ID를 사용하여 프로세스를 종료해야합니다.

해당 Java 프로세스의 프로세스 ID를 얻으려면

ps -A |grep java

이 명령의 출력은 시스템에서 실행중인 Java 프로세스 목록을 제공합니다. 종료 및 실행하려는 프로세스의 프로세스 ID (PID)를 기록하십시오.

kill -9 PID

하나의 명령으로 모든 Java 프로세스를 종료하려면 ps ax | grep java | grep -v 'grep' | cut -d '?' -f1 | xargs kill -9
종료하려면

11

IMO 최고의 솔루션은 다음과 같습니다.

pkill -9 -f <nameOfYourJavaAplication>

완전한. 나는 (에서 ) ps -fC java를 찾았 nameOfYourJavaAplication-Dprogram.name
었다

8

대신에 사용하는 ps그리고 grep, 당신은 사용할 수 있습니다ps-C자바 '이름으로 나열된 모든 명령을 선택할 플래그를'. ps-f플래그를 사용하여 나열된 각 프로세스의 전체 명령 이름을 인쇄 할 수도 있습니다 . 그렇게하면 각 Java 프로세스가 실제로 수행중인 작업을 볼 수 있습니다. 전체 명령은 다음과 같습니다 ps -fC java..

pgrep모든 Java 프로세스를 나열 하는 데 사용할 수도 있습니다 . pgrep -a java각 Java 프로세스의 PID 및 전체 명령 행을 리턴합니다.

죽이고 자하는 명령의 PID가 있으면 kill-9 (SIGKILL) 플래그 및 종료하려는 Java 프로세스의 PID와 함께 하십시오 . Java가 'SIGTERM'신호를 수신 할 때 항상 중지되는 것은 아니며 ( 'SIGTERM'을 처리 할 수있는 프로세스가 허용됨) 'SIGKILL'신호를 전송하여 프로그램을 먼저 경고하지 않고 프로그램을 강제 종료하는 경우가 종종 있습니다.

예를 들어, 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.



0

jps그리고 jcmd자바는 정보의 PID를 처리만을 표시하는 전문 도구입니다.

보다 자세한 출력을 위해 해당 옵션을 탐색 할 수 있습니다.


그것들은 내 컴퓨터에만 표시됩니다.
Alexis Wilke

그렇다면 다른 Java 프로세스가 실행되고 있습니까?!
Muhammad Gelbana

예. 명령을 테스트 할 때 Cassandra 또는 Elassadra를 실행했습니다.
Alexis Wilke

0

다음은 프로세스를 자동화하는 데 사용할 수있는 스크립트입니다.

<PROCESS_NAME>Java가 실행중인 것으로 부품을 교체하십시오 .

#!/bin/sh
process=`ps -ef | grep -v awk | awk -e '/java.*<PROCESS_NAME>/ { print $2 }'`
kill ${process}

참고 : 나는 넣지 않았다 -9. 신호를 캡처하지 않고 SIGTERM(기본값) 실패 하지 않으면 필요하지 않습니다. 또한 쉽게 읽을 수 있도록 신호 이름을 사용하는 것이 좋습니다.

kill -TERM ${process}

경고

실행하기 전에 변수가 예상대로 설정되어 kill ...있는지 확인하십시오 $process. ps -ef유닉스 사이 월 상이한 정도로awk 다른 매개 변수를 인쇄해야 할 수 있습니다.

노트

그만큼 <PROCESS_NAME> 변수로 변경 될 수 있습니다. 명령 줄에 매번 입력해야 할 경우 가끔 실수를 범할 수 있습니다. 올바른 이름의 스크립트 사본을 여러 개 갖는 것이 더 쉽다는 것을 알게되었습니다.

또한 중요 : awk스크립트 의 작은 따옴표를 주목하십시오 . 즉, 사이에 변수가있는 문자열을 닫았다가 다시 열어야합니다. 이와 같은 것이 작동 해야 합니다 (예상되지 않음).

process=`ps -ef | grep -v awk | awk -e '/java.*'"${PROCESS_NAME}"'/ { print $2 }'`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.