sleep 1 & kill -9 $?
위의 내용은 죽일 것입니다 (대부분)세게 때리다쉘 또는 현재 터미널 창.
왜 그런 겁니까?
참고: sleep 1 & kill $?
셸/터미널을 종료하지 않습니다.
내가 생각했던 것과 다른 것을 실행하지 않고 경쟁 조건 등이 있는지 확인하기 위해 다음과 같은 효과가 있습니다.
/bin/sleep 2 & pid=$?; sleep 1; kill -9 $pid
GNU bash, 버전 5.0.3(1) - 출시됨
답변1
$?
마지막 명령의 종료 상태입니다. 백그라운드 명령 시작은 항상 성공하므로 에서 … & do_something_with $?
값은 $?
0입니다. 당신은 달리고 있습니다 kill -9 0
.
전달된 PID는 kill
기본 시스템 호출로 전달됩니다. Shell 매뉴얼에는 PID 이외의 다른 것이 될 수 있다고 문서화되어 있지 않지만시스템 호출 매뉴얼은. PID가 0이면 현재 프로세스의 모든 프로세스를 의미합니다.프로세스 그룹. (-1은 PID 1을 제외한 모든 프로세스를 의미하고 또 다른 음수 값은 지정된 프로세스 그룹의 모든 프로세스를 의미합니다.) 터미널에서 실행 중인 쉘은 자체 프로세스 그룹에 있습니다(많은 루프를 거치지 않거나 하위 쉘이 있는 경우 제외). 이는 백그라운드 작업에 있지 않음) 다음 kill -9 0
과 동일합니다 kill -9 $$
. 쉘 프로세스를 종료합니다.
모든 백그라운드 프로세스(예: sleep
명령)는 계속 실행됩니다. 신호를 받지 못하고, 쉘은 신호를 보낼 기회조차 얻지 못합니다. 터미널이 죽어도 일반적으로 터미널에는 영향을 미치지 않습니다. 하지만 일부 프로그램은 닫힌 터미널에 쓰려고 하면 오류가 발생할 수 있습니다(물론 sleep
작동하지 않습니다).
kill 0
쉘에서 무시되는 TERM 신호를 보냅니다. kill -9 0
무시할 수 없는 KILL 신호를 보냅니다.
가장 최근의 백그라운드 프로세스를 종료하고 싶다면 그게 전부입니다 $!
.