리눅스에서 마지막으로 생성 된 백그라운드 작업을 어떻게 죽일 수 있습니까?
예:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
리눅스에서 마지막으로 생성 된 백그라운드 작업을 어떻게 죽일 수 있습니까?
예:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
답변:
bash에는 이것을위한 특별한 변수가 있습니다 :
kill $!
$! 백그라운드에서 마지막으로 실행 된 프로세스의 PID로 확장됩니다.
^Z
백그라운드 작업을하지 않고 중지합니다. 후속 bg
은 실제 '백그라운드'(백그라운드에서 실행을 재개)를 수행 한 후 $!
예상대로 작동합니다.
????
종료 후 실행될 하나 이상의 명령을 의미 한다고 가정합니다. 해당 명령 중 하나가 백그라운드 프로세스에 의해 수행 된 작업에 의존하는 경우 백그라운드 프로세스가 신호 처리기에서 수행 할 수있는 정리 또는 마무리 작업을 염두에 두어야합니다. (트 랩핑 가능) 신호 수신. 이러한 '종속적 인'명령 중 첫 번째 바로 앞에 ( 또는 wait
뒤에) 가 추가하는 것이 가장 좋습니다. sync
sleep <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 -l
PID를 다시 입력하면 지루합니다.
while true
와 함께 while sleep 1
. 이렇게하면 다시 시작할 수 있기 때문에 잠시 지연되고 ctrl-c를 두 번 누르면 두 번째 것이 절전 모드를 중단하고 0이 아닌 종료로 종료하고 루프를 종료합니다.
killall 명령을 사용하십시오.
killall 작업 이름
자세한 정보와 고급 옵션을 보려면 "man killall"을 입력하십시오.
killall python
또는 killall java
뭔가 유용한 실행하면서하면 시스템에 알려서.