이 bash 스크립트가 종료될 때 호출 프로세스를 종료하는 이유는 무엇입니까?

이 bash 스크립트가 종료될 때 호출 프로세스를 종료하는 이유는 무엇입니까?

이 bash 스크립트를 실행할 때배경이 있는, 호출 셸을 종료합니다. 왜 이런거야?

#!/bin/bash
#
# weird job control, background termination of parent shell problem
set -eum
echo "Do not go gentle into that good night"
sleep 1

다른 이름으로 저장하고 wat실행 chmod +x wat하세요 wat. 문제 없습니다. 달리다배경이 있는:

wat &

현재 쉘이 닫힙니다! ? 더 이상한 점은 마지막 수면 라인을 주석 처리하면 백그라운드에서 꽤 행복하게 실행될 수 있다는 것입니다. 누구든지 이것을 설명할 수 있나요?

-m이것이 (작업 제어) 옵션과 관련이 있다는 것은 알지만 set왜 그런지는 모르겠습니다...

답변1

Bash 4.3.30을 사용하여 스크립트를 실행하지만 Bash 4.4.12를 사용하여 스크립트를 실행하면 이런 일이 발생하는 것을 볼 수 있습니다. (스크립트를 실행하는 쉘 버전은 그다지 중요하지 않은 것 같습니다.)

더 이상 둘로 나누지 않았지만 그 안에는 이것이 있습니다변경 로그다음과 같이 적용될 수 있을 것 같습니다.

This document details the changes between this version, bash-4.4-rc1, and
the previous version, bash-4.4-beta.

i.  Fixed a bug that caused background processes run from non-interactive shells
    with job control enabled to place the terminal in the wrong process group
    under certain circumstances.

답변2

남성의 경우:

-m 모니터 모드.

작업 제어가 활성화되었습니다. 이 옵션은 이를 지원하는 시스템의 대화형 셸에 대해 기본적으로 활성화되어 있습니다(위의 작업 제어 참조). 백그라운드 프로세스는 별도의 프로세스 그룹에서 실행되며 완료되면 종료 상태가 포함된 줄을 인쇄합니다.

보안 로그에서:

XXXX에서 연결 끊김 수신: 0

-m을 설정하면 백그라운드 프로세스가 완료된 후 종료 상태가 현재 쉘에 인쇄되는 것 같습니다 exit 0. securelog에서 목격할 수 있습니다.

관련 정보