프로그래밍 중에 프로세스를 종료해야하는 경우가 종종 있습니다.
내가 지금하는 방법은 다음과 같습니다
[~]$ ps aux | grep 'python csp_build.py'
user 5124 1.0 0.3 214588 13852 pts/4 Sl+ 11:19 0:00 python csp_build.py
user 5373 0.0 0.0 8096 960 pts/6 S+ 11:20 0:00 grep python csp_build.py
[~]$ kill 5124
프로세스 ID를 자동으로 추출하여 같은 줄에서 죽일 수 있습니까?
이처럼 :
[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>
답변
에서 다음 bash
을 수행 할 수 있어야합니다.
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
작동에 대한 자세한 내용은 다음과 같습니다.
- 그만큼
ps
당신에게 모든 프로세스의 목록을 제공합니다. grep
검색 문자열을 기반으로 하는 필터[p]
는 실제 검색 을 중지시키는 속임수입니다.grep
프로세스 자체 입니다.- 그만큼
awk
은 각 줄의 두 번째 필드 인 PID입니다. $(x)
구조체 수단 실행할x
다음 출력을 받아 그 명령 행 입었다.ps
위의 구문 내 에서 해당 파이프 라인 의 출력은 프로세스 ID 목록이므로 결국 같은 명령으로 끝납니다kill 1234 1122 7654
.
다음은 그 내용을 보여주는 대본입니다.
pax> sleep 3600 &
[1] 2225
pax> sleep 3600 &
[2] 2226
pax> sleep 3600 &
[3] 2227
pax> sleep 3600 &
[4] 2228
pax> sleep 3600 &
[5] 2229
pax> kill $(ps aux | grep '[s]leep' | awk '{print $2}')
[5]+ Terminated sleep 3600
[1] Terminated sleep 3600
[2] Terminated sleep 3600
[3]- Terminated sleep 3600
[4]+ Terminated sleep 3600
모든 침목이 끝나는 것을 볼 수 있습니다.
grep '[p]ython csp_build.py'
비트를 좀 더 자세히 설명하면 다음과 같습니다.
당신은 않을 경우 sleep 3600 &
다음 ps -ef | grep sleep
, 당신이하는 경향 이 개 와 프로세스 sleep
그것에서, sleep 3600
그리고 grep sleep
그들 모두가 (때문에를sleep
로켓 과학이 아니다 그, 그 (것)들에서).
그러나 ps -ef | grep '[s]leep'
그 안에 프로세스를 만들지 sleep
않고 대신 grep '[s]leep'
여기에 까다로운 비트가 있습니다. grep
정규 표현식 “캐릭터 클래스의 모든 문자 [s]
(즉, s
뒤에 오는) “를 찾고 있기 때문에 찾지 못합니다.leep
.
즉, 찾고 sleep
있지만 grep 프로세스는grep '[s]leep'
에는없는sleep
.
내가 이것을 보았을 때 (여기 누군가 여기 있음) 즉시 사용하기 시작했습니다.
- 추가하는 것보다 프로세스가 적습니다
| grep -v grep
. 과 - 우아 하고 비열한, 드문 조합 🙂
답변
당신이 pkill이 있다면
pkill -f csp_build.py
전체 인수 목록 대신 프로세스 이름에 대해서만 grep하려는 경우 off로 두십시오 -f
.
답변
짧막 한 농담:
ps aux | grep -i csp_build | awk '{print $2}' | xargs sudo kill -9
- 열 2를 인쇄하십시오.
awk '{print $2}'
sudo
선택 사항입니다- 실행
kill -9 5124
,kill -9 5373
등 (살인 -15 약간 느린 더 우아한 만입니다)
보너스:
또한 내 .bash_profile에 2 개의 바로 가기 기능이 정의되어 있습니다 (~ / .bash_profile은 osx 용이며 * nix 시스템에서 작동하는 것을 확인해야합니다).
- p 키워드
- 모든 P를 나열 키워드가 포함 rocesses
- 사용 예 : :
p csp_build
,p python
등
bash_profile 코드 :
# FIND PROCESS
function p(){
ps aux | grep -i $1 | grep -v grep
}
- 카 키워드
- K는 악 을 이 키워드가 LL 프로세스를
- 사용법 예 :
ka csp_build
,ka python
등 - 선택적 킬 레벨 예 :
ka csp_build 15
,ka python 9
bash_profile 코드 :
# KILL ALL
function ka(){
cnt=$( p $1 | wc -l) # total count of processes found
klevel=${2:-15} # kill level, defaults to 15 if argument 2 is empty
echo -e "\nSearching for '$1' -- Found" $cnt "Running Processes .. "
p $1
echo -e '\nTerminating' $cnt 'processes .. '
ps aux | grep -i $1 | grep -v grep | awk '{print $2}' | xargs sudo kill -klevel
echo -e "Done!\n"
echo "Running search again:"
p "$1"
echo -e "\n"
}
답변
killall -r regexp
-r, --regexp
프로세스 이름 패턴을 확장 정규식으로 해석하십시오.
답변
사용해보십시오
ps aux | grep 'python csp_build.py' | head -1 | cut -d " " -f 2 | xargs kill
답변
당신은 단지 사용할 수 있습니다 pkill '^python*'
정규식 프로세스 종료 .
죽이기 전에 무엇을 죽이거나 찾을 것인지 보려면 pgrep -l '^python*'
where -l outputs 프로세스 이름을 사용하십시오. 을 사용하지 않으려면 다음을 사용하십시오
pkill
.
pgrep '^python*' | xargs kill
답변
pgrep 사용-많은 플랫폼에서 사용 가능 :
kill -9 `pgrep -f cps_build`
pgrep -f는 “cps_build”와 일치하는 모든 PID를 반환합니다