프로세스를 죽이는 우아한 방법


12

셀레늄 서버로 bash 스크립트를 완료하면 스크립트는 다음과 같이 종료합니다.

kill `ps -ef | grep selenium | awk '{ print $2 }'`

이것이 작동하고 셀레늄 스크립트를 죽이는 동안 프로세스를 죽이려고합니다. grep selenium따라서 프로세스 번호가 kill 명령으로 돌아올 때까지 프로세스가 종료되어 오류 메시지가 생성됩니다. (즉, 두 프로세스를 죽이게됩니다. 그중 하나는 실제 셀레늄 서버이고 다른 하나는 내가이 명령을 수행하는 방식의 부작용 인 한순간 프로세스입니다.)

의도하지 않은 부작용이없는 프로세스를 죽일 수있는 더 우아한 방법이 있습니까?

(내가 가진 한 가지 아이디어 :이 동일한 스크립트는 스크립트에서 일찍 셀레늄을 시작하므로 셀레늄을 시작할 때 PID를 캡처 할 수있는 방법이 있다면 grepping 대신 유지하고 직접 죽일 수 있습니다. 문제는 PID를 얻는 방법, 변수를 사용하여 변수를 유지하는 방법 및 스크립트에서 나중에 참조하는 방법을 모른다는 것입니다.하지만 더 좋은 방법은 무엇입니까?)

답변:


12

사용하려고 pkill selenium하는 경우도이 없으며, 다른 하나는 같은 다른 파이프 순서와 방법을 계속 사용할 수 있습니다 작동

kill `ps -ef|grep -i selenium| grep -v grep| awk '{print $2}'`

pkill은 내 서버에서 작동하지 않지만 개선 된 grep strip이 많은 도움이됩니다.
Eric

20

pgrep관심있는 명령의 PID를 출력 하는 명령을 사용해보십시오 .

pgrep selenium

실제로 프로세스를 종료하려면 companion pkill명령을 사용하십시오 .

pkill selenium

나는 이것의 우아함을 좋아하지만 프로세스는 다음과 같습니다 : "root 26401 11997 2 23:20 pts / 1 00:00:00 java -jar /home/lm/cron/selenium-server-standalone-2.19.0. 항아리 "그래서 그냥 그것을 변경 pgrep java하고 작동합니다 :-) 감사합니다!
Eric

2
pgrep에 '-f'플래그를 지정하면 패턴이 전체 명령 줄과 일치합니다. 따라서이 경우에는 킬 pgrep -f selenium이 작동해야합니다.
mills013

7
사용 pkill이 훨씬 간단합니다. pkill와 정확히 일치하는 기준을 사용 pgrep하므로 2 대신 1 명령으로이를 수행 할 수 있습니다 (하나의 출력에 의존해야 함).
Patrick

7

를 사용해보십시오 grep [s]elenium. 이것은 grep 프로세스를 찾지 못할 것입니다.


이것은 실제로 유용한 트릭입니다. 왜 작동합니까?

2
@hesse- grep기본적으로 BRE를 사용합니다. 즉, []에 표시 argv에 대한 grep,하지만 때문에 일치하지 않는 []에 의해 그대로 사용되지 않습니다 grep.
Chris Down

나는 종종 | grep -v grep파이프 의 구성 요소를 사용했습니다 . 그러나 이것은 매우 우아하고 좋아합니다!
Alexios 2016 년

현재 작업 디렉토리에 파일을 가지고있는 프로세스와 이름이 같은 경우에는 충분하지 않습니다 (종종). 따라서 일반적으로 사용하는 솔루션은 다음과 같습니다 ps -ef | grep \[s]elenium. 비록 and lsof을 사용하는 것보다 훨씬 더 나은 대안이라는 것을 알았 습니다 . psgrep
Moreaki

2

killall명령은 언급되지 않았으며 레퍼토리에 유용한 추가 기능이라고 생각합니다.

$ killall selenium

-r regex옵션을 사용하여 프로세스 이름 및 시간 값과도 일치하는 정규식을 지정할 수 있습니다 .

$ killall -o 5m selenium 

5 분보다 오래된 모든 셀레늄 프로세스를 종료합니다.


이는 비 RHEL / CentOS 버전의 고유 한 것으로 보입니다killall
ewwhite

0

-m 1grep 명령과 함께 스위치를 사용하여 처음 발견 된 프로세스 만 페치하십시오. PID를 기준으로 프로세스를 정렬하면 오름차순으로 작동합니다.


1
셀레늄 프로세스가 더 낮은 PID를 사용하고 있는지 확신 할 수 없습니다.
FJRA

초기에 시작된 프로세스 인 FJRA는 항상 낮은 PID를 갖습니다. 'grep selenium'보다 먼저 셀레늄 서버가 시작되었으므로 PID가 낮아집니다.
hellodanylo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.