testing
savein이라는 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
스크립트)는 여전히 실행 중입니다!
나는 루트가 아닌 사용자가 터미널 창을 닫고 있기 때문에 루트 프로세스에 영향을 미치는 데 필요한 권한이 없기 때문에 이것이라고 생각합니다. 맞습니까? 여기에 기본적인 것이 빠진 것 같습니다. 터미널 창이 닫힐 때 루트 프로세스를 종료시키는 방법이 있습니까?