testing
save inside 라는 bash 스크립트가 있습니다 /usr/local/bin
.
macOS의 한 터미널 창에서 sudo testing
. 두 번째 터미널 창에서 프로세스 목록을 생성합니다.
ps -axo tty,pid,ppid,args | { head -1; grep "bash\|testing" | grep -v grep; }
예상대로 반환됩니다.
TTY PID PPID ARGS
ttys000 73674 73673 -bash # login shell used to run sudo
ttys000 73701 73674 sudo testing # sudo process
ttys000 73702 73701 /bin/bash /usr/local/bin/testing # "testing" bash script being run by sudo
ttys001 3714 3713 -bash # second login shell used to generate this process list
그러나 첫 번째 터미널 창(~하는 동안 testing
여전히 실행 중) 프로세스 목록은 다음과 같습니다.
TTY PID PPID ARGS
?? 73701 1 sudo testing
?? 73702 73701 /bin/bash /usr/local/bin/testing
ttys001 3714 3713 -bash
예상한 대로 첫 번째 로그인 셸이 종료되었고 두 번째 로그인 셸이 계속 실행 중입니다. 그러나 sudo 프로세스와 그 분기된(현재 고아가 된) 자식인 testing
스크립트는 여전히 실행 중입니다!
이는 루트가 아닌 사용자가 터미널 창을 닫는 사용자이기 때문에 루트 프로세스에 영향을 미치는 데 필요한 권한이 없기 때문이라고 생각합니다. 이 올바른지? 여기에 기본적인 것이 빠진 것 같습니다. 터미널 창이 닫힐 때 루트 프로세스가 종료되도록 허용하는 방법이 있습니까?