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


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.