특정 프로세스를 제외한 모든 프로세스를 종료하는 방법


13

내 로컬 서버에서 많은 Java 프로세스가 실행 중이며 동시에 Eclipse를 사용하고 있습니다. 이제 프로세스를 다시 시작해야 할 때 (쉘 스크립트를 통해 프로세스를 시작) 매번 시작하기 전에 이전 프로세스를 종료해야합니다.

방법 1 :-( kill -9 $Pid 각 프로세스마다 하나씩 시간이 걸리는)

방법 2 :-( killall -9 java모든 프로세스에 대해-쉽지만 Eclipse가 불필요하게 종료됩니다)

방법 2의 경우 이클립스도 죽습니다. 이것으로부터 어떤 방법이 있습니까? 나는 있어야합니다 내기 : P

편집 : 우분투 15.04를 사용하고 있습니다.


openjdk를 사용하고 있습니까?
Maythux

어떤이는 자바 7 - 오라클
Atiq

내 답변 확인
Maythux

답변:


17

이 명령을 시도해보십시오 :

ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill

이것은 java를 포함하고 일식을 제외한 모든 프로세스를 검색 한 다음 종료합니다.


3
무차별 적으로 사용 하지 않기 위한 ++ 1 -9. 프로세스에 정상적으로 종료 할 수있는 기회를 주어야합니다.
Rmano

pgrep더 나은보다 ps | grep다른대로 그렙 문 자체를 죽이는 위험이 있습니다.
abligh

2
@abligh 문제는 단지보고 만하 pgrep기 때문에 일식을 실행하는 프로세스를 구별 할 수 없다는 pgrep -ljava입니다. @ Maythux는 참조 용 egrep으로 더 이상 사용되지 않으며 고정 문자열과 일치하므로 grep -E필요하지 않지만 정확히 동일 하므로 사용 하면 안됩니다 grep -E. 그래서 grep -v "eclipse"(또는 당신이 화려하고 싶다면 [...] | grep -F "java" | grep -vF "eclipse | [...]")
kos

@kos : 테스트되지 않음 :pkill '/java\(.*eclipse\)\@!'
abligh

@abligh 무엇입니까 \@!? 그것이 Perl-ism이라면 작동하지 않을 것입니다 pkill.ERE 만 지원하기 때문에이 전체 작업을 이미 pkill부정적인 lookahead와 함께 사용하는 단일 명령으로 줄이기 위해 노력했지만 이 이유로 실패했습니다.
kos

12

사용 awk

ps ax | awk '/java/ && !/eclipse/ {system("kill "$1)}'

이 명령 java은 프로세스가 아닌 모든 프로세스를 종료합니다 eclipse.


3
@maythux IMHO ... ;-)
Fabby

Fabby에 동의합니다.
kos

1

어때요?

pgrep -af 'java' | grep -Po '^[^ ]+(?!.*eclipse)' | xargs kill
  • pgrep -af 'java'java프로세스의 전체 명령 행에서 검색하여 나열

  • grep -Po '^[^ ]+(?!.*eclipse)'검색된 프로세스를 살펴보고 eclipse전체 명령 행에 없는 프로세스의 프로세스 ID를 가져옵니다.

  • xargs kill 프로세스를 죽일 것입니다.


짧고 우아한 솔루션 인 경우 +1 위의 두 번째 단계에서 사용하는 perl 정규식을 지원 하는 경우 훨씬 효율적인 (단 하나의 명령 :) pkill솔루션을 pgrep/pkill가질 수 있습니다. 불행히도 pgrep/ pkill확장 정규 표현식 만 지원합니다 (예 :) egrep/grep -E.
arielf

@arielf 당신은 절대적으로 right..it 경우 가장 효율적인했을 것이다있다 pgrep/ pkill지원 PCRE ..
heemayl

0

jps -m | grep -v eclipse | awk '{print $1}' | xargs -t kill

jps를 사용하여 java 명령 만 찾고 경로에 java가있는 모든 명령이 아닌지 확인하십시오.


0
ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill

1
암호 명령 문자열을 제공하는 것보다 명령을 설명하는 것이 더 좋았을 것입니다. 또한 장기 실행 명령 "orkjavagoob.sh"는 무엇입니까
월터 레이터
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.