Bash 스크립트가 있습니다 script1
.
#! /bin/bash
evince
그리고 또 다른 스크립트script2
#! /bin/bash
evince &
내가 달릴 때
./script2
bash 프로세스는 evince
백그라운드 로 들어간 후 즉시 종료되며 evince
프로세스는 계속 실행됩니다.
내가 달릴 때
./script1 &
bash 프로세스가 evince
실행이 완료되기를 기다리고 있습니다.
내가 bash 프로세스라면 kill
bash 프로세스가 종료되고 프로세스가 종료됩니다 evince
.
evince
bash 프로세스 종료가 두 번째 스크립트의 프로세스에는 영향을 미치지 않지만 첫 번째 스크립트의 프로세스에는 영향을 미치는 이유를 알고 싶습니다 .
fork(), exit()
및 와 같은 시스템 호출 측면에서 설명할 수 있습니까 wait()
?
감사해요.
이는 다음과 관련이 있습니다.백그라운드에서 실행되는 이 스크립트가 쉘을 "kill" 호출하고 종료해도 살아남을 수 있는 이유는 무엇입니까?, 그러나 여기서는 기본적인 일반적인 경우를 배우고 싶습니다.
답변1
쉘만 종료했다면 bash에 대한 버그 보고서를 제출해야 합니다.
최신 쉘은 대화형 쉘에 대한 작업 제어를 자동으로 활성화하므로,
./script1&
자체 프로세스 그룹 ID를 사용하여 새 작업을 만듭니다.
evince
다음을 호출하면 쉘은 프로그램을 기다립니다 .
kill -9 $!
쉘만 종료되고 evince
계속 실행됩니다.
그러나 전화하는 경우:
kill %1
이렇게 하면 를 포함한 전체 작업이 종료됩니다 evince
.