리눅스에서 마지막으로 생성 된 백그라운드 작업을 어떻게 죽일 수 있습니까?
예:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
리눅스에서 마지막으로 생성 된 백그라운드 작업을 어떻게 죽일 수 있습니까?
예:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
답변:
bash에는 이것을위한 특별한 변수가 있습니다 :
kill $!
$! 백그라운드에서 마지막으로 실행 된 프로세스의 PID로 확장됩니다.
^Z백그라운드 작업을하지 않고 중지합니다. 후속 bg은 실제 '백그라운드'(백그라운드에서 실행을 재개)를 수행 한 후 $!예상대로 작동합니다.
????종료 후 실행될 하나 이상의 명령을 의미 한다고 가정합니다. 해당 명령 중 하나가 백그라운드 프로세스에 의해 수행 된 작업에 의존하는 경우 백그라운드 프로세스가 신호 처리기에서 수행 할 수있는 정리 또는 마무리 작업을 염두에 두어야합니다. (트 랩핑 가능) 신호 수신. 이러한 '종속적 인'명령 중 첫 번째 바로 앞에 ( 또는 wait뒤에) 가 추가하는 것이 가장 좋습니다. syncsleep <n>
당신은 직업 번호로 죽일 수 있습니다. 백그라운드에서 작업을 넣으면 다음과 같은 내용이 표시됩니다.
$ ./script &
[1] 35341
이는 [1]작업 번호이며 다음과 같이 참조 될 수 있습니다.
$ kill %1
$ kill %% # Most recent background job
작업 번호 목록을 보려면 jobs명령을 사용하십시오 . 더 많은 것 man bash:
쉘에서 작업을 참조하는 방법에는 여러 가지가 있습니다. 캐릭터
%는 작업 명을 소개합니다. 작업 번호n는이라고 할 수 있습니다%n. 작업을 시작하는 데 사용되는 이름의 접두사를 사용하거나 명령 줄에 나타나는 하위 문자열을 사용하여 작업을 참조 할 수도 있습니다. 예를 들어,%ce중지 된ce작업을 나타냅니다 . 접두사가 둘 이상의 작업과 일치하면 bash는 오류를보고합니다.%?ce반면 에을 사용하면ce명령 줄에 문자열 이 포함 된 작업을 나타냅니다 . 부분 문자열이 둘 이상의 작업과 일치하면 bash는 오류를보고합니다. 기호%%와%+쉘이 현재 작업에 대한 개념을 참조하십시오. 포 그라운드에 있거나 백그라운드에서 시작된 동안 마지막으로 중지 된 작업입니다. 이전 작업은을 사용하여 참조 할 수 있습니다%-. 작업과 관련된 출력 (예 : jobs 명령의 출력)에서 현재 작업은 항상으로 표시되고+이전 작업은으로 표시-됩니다. 단일%작업 (동봉 된 작업 스펙이 없음)도 현재 작업을 나타냅니다.
set -m) 에서 켤 수 있지만 대화 형으로 사용하기위한 것입니다. 참조 stackoverflow.com/questions/690266/...을 뿐만 아니라
%1와 %%- 특히. 일부는 Ctrl-C에서 죽지 않으므로 Ctrl-Z를 누른 다음 kill -9 %%. 내가 유용하다고 생각한 한 가지 예는 다음과 같습니다. while true; do mplayer <some unstable online radio>; date >> restarts.log; done-Ctrl-C는 다음 루프 반복으로 이동합니다. 내가 ps또는 어쩌면 하기 전에 jobs -lPID를 다시 입력하면 지루합니다.
while true와 함께 while sleep 1. 이렇게하면 다시 시작할 수 있기 때문에 잠시 지연되고 ctrl-c를 두 번 누르면 두 번째 것이 절전 모드를 중단하고 0이 아닌 종료로 종료하고 루프를 종료합니다.
killall 명령을 사용하십시오.
killall 작업 이름
자세한 정보와 고급 옵션을 보려면 "man killall"을 입력하십시오.
killall python또는 killall java뭔가 유용한 실행하면서하면 시스템에 알려서.