정상적으로 프로세스 종료

정상적으로 프로세스 종료

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

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

이것이 작동하고 Selenium 스크립트를 종료하는 동시에 프로세스도 종료하려고 시도하므로 grep selenium프로세스 번호가 kill 명령에 반환될 때쯤에는 프로세스가 이미 사라져 오류 메시지가 생성됩니다. (즉, 결국 두 개의 프로세스가 종료되었습니다. 그 중 하나는 실제 셀레늄 서버였고 다른 하나는 이 명령을 실행하는 데 따른 부작용인 단기 프로세스였습니다.)

의도하지 않은 부작용이 발생하지 않도록 프로세스를 종료하는 더 우아한 방법이 있습니까?

(FWIW 아이디어가 있습니다. 이 동일한 스크립트는 스크립트 초기에 셀레늄을 시작하므로 셀레늄이 시작될 때 PID를 캡처하는 방법이 있다면 이를 유지하고 grep 대신 직접 종료할 수 있습니다. 질문은 다음과 같습니다. 해당 PID를 얻는 방법을 모르고 변수를 사용하여 이를 유지하고 나중에 스크립트에서 참조하지만 이것이 더 나은 접근 방식입니까?)

답변1

pgrep명령을 시도하면 관심 있는 명령의 PID가 출력됩니다.

pgrep selenium

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

pkill selenium

답변2

pkill selenium이 방법이나 다른 방법 중 하나라도 작동하지 않으면 다음을 사용해 보십시오. 다른 파이프라인 시퀀스와 함께 해당 방법을 계속 사용할 수 있습니다.

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

답변3

을 사용해 보십시오 grep [s]elenium. 이렇게 하면 grep 프로세스를 찾을 수 없습니다.

답변4

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

관련 정보