/home/testing/scripts
Linux 시스템의 폴더에는 온전함을 수행하고 테스트하기 위한 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 등으로 표시되어야 함).awk
p
.
\.
*
\*
echo
스크립트가 실제로 종료될 준비가 되면 제거하십시오.