이 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에서 목격할 수 있습니다.