0
ssh 시간 초과 나 터미널이 닫힌 경우에도 bash 함수를 계속 실행하려고합니다. 별도로 호출 할 새 스크립트 파일을 만들고 싶지 않기 때문에 nohup과 '&'메서드를 사용하여 목표를 달성했습니다.왜 부모가 죽었을 때 bash 백엔드 함수가 실패를 리턴합니까?
(
trap "" HUP
sleep 10
echo 'abc123!' | sudo -S -p '' bash -c "cat /etc/shadow"
ret=$?
if [ $ret -ne 0 ]; then
echo "failed-->$ret" >> /tmp/test.log
fi
)&
위의 내용은 부모가 죽은 후에 계속 실행해야하는 사람들을 나타내는 스크립트 중 일부입니다. 스크립트는 루트가 아닌 사용자가 실행하므로 sudo를 사용하여 일부 명령을 실행해야합니다. 이 스크립트는 해당 부모가 활성 상태 일 때 성공적으로 반환합니다. 그러나 실행 중일 때 터미널을 닫으면 자식 프로세스가 종료 된 후 test.log 파일에서 'failed -> 1'이됩니다. 그러면 스크립트의 문제점을 누구에게 말해 줄 수 있습니까?
일부는 구현에 따라 다르므로 이것이 확실한 대답이라고 말하지 마십시오. 보통 시그널 마스크 (무시 된 시그널)는 자식 프로세스에 의해 상속되지만,'sudo'는 시그널 핸들링을하고'trap'을 오버라이드 할 것입니다. 사용자 프로세스가 보낸 SIGHUP은 실행중인 명령으로 전달되지만 시스템에서는'man sudo'를 실행하고 권위있는 응답을 위해'신호 처리 '를 검색합니다. – cdarke
'shopt -u huponexit' 시도 – cdarke
궁금한데 왜'bash -c'가 필요한가요? 'cat'은'bash'에 연결되지 않은 외부 프로그램입니다. – cdarke