폴더에서 실행되는 모든 스크립트의 PIDS를 아는 올바른 방법은 무엇입니까

폴더에서 실행되는 모든 스크립트의 PIDS를 아는 올바른 방법은 무엇입니까

/home/testing/scriptsLinux 시스템의 폴더에는 온전함을 수행하고 테스트하기 위한 234개의 서로 다른 스크립트가 있습니다.

~처럼

/home/testing/scripts/test.network.py
/home/testing/scripts/test.hw.py
/home/testing/scripts/test.load.sh
.
.
.

어떤 경우에는 실행 중인 모든 스크립트를 종료하고 싶습니다.

따라서 실행 중인 스크립트의 pid를 찾으려면 다음을 수행합니다.

lsof /home/testing/scripts/

그리고 우리가 사용하는 모든 PID를 종료합니다:

for proccess in `lsof /home/testing/scripts/ | awk '{print $2}' | grep -v proccess`; do kill $proccess; done

스크립트를 실행한다고 가정해 보겠습니다./home/testing/scripts/test.network.py

ps -ef |grep "testing/scripts"우리 에게서 얻으세요

root      5793 17546 84 09:20 ?        00:00:00 python3 -u /home/testing/scripts/test.network.py

그래서 lsof우리는 동일한 pid 번호를 얻어야 합니다

lsof /home/testing/scripts/

이제 내 방법이 무엇인지 알고 싶습니다.

for proccess in `lsof /home/testing/scripts/ | awk '{print $2}' | grep -v proccess`; do kill $proccess; done

아래에서 실행 중인 모든 스크립트를 종료하기에 충분합니다./home/testing/scripts/

아니면 다른 제안이 있을까요?

답변1

명령을 약간 정리할 수 있지만 내 생각에는 이미 꽤 정확합니다. 잠재적인 불일치를 줄이기 위해 파일 이름을 더 가깝게 일치시키고 각 후보 PID가 실제로 숫자인지 확인합니다.

lsof | awk -v p='^/home/testing/scripts/' '$9~p && $2+0 {print $2}' | sort -u | xargs echo kill

^변수의 디렉토리 할당은 로 시작됩니다 . 또한 정규 표현식의 일부로 해석될 수 있는 문자를 이스케이프해야 합니다(즉, as 등으로 표시되어야 함).awkp.\.*\*

echo스크립트가 실제로 종료될 준비가 되면 제거하십시오.

관련 정보