스크립트를 실행할 때 비대화형 bash 프로세스 종료가 하위 프로세스에 영향을 미치거나 영향을 주지 않는 이유는 무엇입니까?

스크립트를 실행할 때 비대화형 bash 프로세스 종료가 하위 프로세스에 영향을 미치거나 영향을 주지 않는 이유는 무엇입니까?

Bash 스크립트가 있습니다 script1.

#! /bin/bash
evince 

그리고 또 다른 스크립트script2

#! /bin/bash
evince &

내가 달릴 때

./script2

bash 프로세스는 evince백그라운드 로 들어간 후 즉시 종료되며 evince프로세스는 계속 실행됩니다.

내가 달릴 때

./script1 &

bash 프로세스가 evince실행이 완료되기를 기다리고 있습니다.

내가 bash 프로세스라면 killbash 프로세스가 종료되고 프로세스가 종료됩니다 evince.

evincebash 프로세스 종료가 두 번째 스크립트의 프로세스에는 영향을 미치지 않지만 첫 번째 스크립트의 프로세스에는 영향을 미치는 이유를 알고 싶습니다 .

fork(), exit()및 와 같은 시스템 호출 측면에서 설명할 수 있습니까 wait()?

감사해요.

이는 다음과 관련이 있습니다.백그라운드에서 실행되는 이 스크립트가 쉘을 "kill" 호출하고 종료해도 살아남을 수 있는 이유는 무엇입니까?, 그러나 여기서는 기본적인 일반적인 경우를 배우고 싶습니다.

답변1

쉘만 종료했다면 bash에 대한 버그 보고서를 제출해야 합니다.

최신 쉘은 대화형 쉘에 대한 작업 제어를 자동으로 활성화하므로,

./script1&

자체 프로세스 그룹 ID를 사용하여 새 작업을 만듭니다.

evince다음을 호출하면 쉘은 프로그램을 기다립니다 .

kill -9 $!

쉘만 종료되고 evince계속 실행됩니다.

그러나 전화하는 경우:

kill %1

이렇게 하면 를 포함한 전체 작업이 종료됩니다 evince.

관련 정보