hup 신호는 언제 상위 프로세스에 영향을 줍니까? [복사]

hup 신호는 언제 상위 프로세스에 영향을 줍니까? [복사]

을 실행하면 ./script.sh &스크립트는 다음과 같습니다.

#!/bin/bash
echo "hello"
sleep 30
echo "hello again"
sleep 30
touch /root/foo.txt

그런 다음 ps au를 사용하여 "sleep" 호출 프로세스 ID를 식별한 다음 Kill -HUP를 통해 종료했습니다. 그런 다음 프로그램은 여전히 ​​종료됩니다. 자녀가 '잠들' 때 부모에게 알림이 전송되나요?

그러나 echo를 실행 "hello" && sleep 30 && echo "hello again" && sleep 30 && touch /root/testFILE.txt &하고 프로세스를 반복하면 프로그램이 완료되지 않습니다. 왜 이런거야? 실제로 마지막 "sleep" 중에 연결을 끊으면(ssh를 통해 amazon linux 2를 실행하는 ec2 인스턴스에 ssh를 통해 연결되어 있기 때문에) 실제로 파일에 "접촉"합니다.

연결을 끊으면 sleep 명령에 HUP 신호가 전송되어야 합니다(제 생각에는). 이는 이전 단락과 동일한 결과를 가져야 하지만, 그런데, 돌아오면 파일이 거기에 있습니다...

(참고: Kill -HUP을 통해 마지막 "sleep" 동안 hup 신호를 수동으로 보내면 파일도 생성되지 않습니다...) 무슨 일이 일어나고 있나요? EC2 인스턴스와 관련이 있을 수 있습니까? 아니면 Unix 운영 체제로만 설명할 수 있습니까?

답변1

스크립트는 관계없이 모든 명령을 실행합니다. 명령줄에서는 &not을 사용하므로 ;각 명령은 이전 명령이 성공한 경우에만 실행됩니다. 절전 종료가 성공하지 못했거나 원하는 경우 반환 값이 0(성공!)이 아닌 129(성공이 아님)가 됩니다.

그런데 값 129는 신호 번호(HUP는 1)에 128을 더한 값이거나 SIGTERM(신호 15)을 사용하는 경우 143입니다. 어느 쪽이든 129 또는 143은 0이 아니므로 명령 문자열의 다음 명령은 실행되지 않습니다.

관련 정보