tmux에 관해 질문한 질문에 대한 답변을 이해하는 데 어려움을 겪고 있습니다. 구체적으로 말하면 의사 터미널이 종료될 때 하위 프로세스에 수행하는 작업입니다.
원래 질문
나는 제출했다tmux의 GitHub 문제 추적기 관련 문제:
tmux에서 다음 동작을 관찰합니다. 쉘 시작 스크립트(예를 들어,
.bashrc
또는.profile
) 이렇게# ~/.bashrc if [ -n "$TMUX" ]; then sleep 100 & fi
그런 다음 tmux가 종료되면 프로세스가 종료됩니다. 즉, tmux를 시작한 후 1) 다음
pgrep sleep
을 사용하여 PID를 가져올 수 있습니다. 2) tmux 세션에서 분리한 후에도 여전히 볼 수 있지만 3) tmux 세션을 완전히 종료하면 더 이상 존재하지 않습니다.반면
sleep 100 &
에 명령 프롬프트(tmux 내에서)에서 수동으로 실행하면 tmux가 종료된 후에도 지속됩니다. 베어 터미널에서sleep 100 &
via를 호출하면.bashrc
쉘이 종료된 후에도 지속됩니다.
- 티먹스 v2.6
- macOS 10.11 엘 캐피탄
- 배쉬 v4.4.12(1)
공식 답변
니콜라스 메리어트는 이렇게 대답했습니다.
tmux는 pty 마스터를 종료합니다. 여기서 관련이 끝나고 나머지는 프로세스 자체와 커널에 달려 있습니다. 자체적으로 관리되지 않는 백그라운드 프로세스가 상위 프로세스가 종료된 후에도 안정적으로 유지되도록 하려면 nohup을 사용해야 합니다.
새로운 질문
@nicm의 답변은 원래 질문에서 설명한 동작을 어떻게 설명합니까?
즉, pty가 명령줄에서 수동으로 생성된 .bashrc
하위 프로세스와 /에 의해 생성된 하위 프로세스 를 다르게 처리하는 이유는 무엇입니까? .profile
(또는 pty 마스터가 종료될 때 전자는 종료되고 후자는 종료되지 않는 이유는 무엇입니까?) pty 마스터를 종료하는 것은 단순히 터미널 에뮬레이터를 종료하는 것과 어떻게 다릅니까?
답변1
M. Marriott의 설명은 다음과 같습니다.tmux는 이것의 원인이 아닙니다.
당신이 보는 것에 대한 설명다른 곳에 위치systemd-logind
, 특히 세션 리더 프로그램, 터미널 제어, 끊기 신호, 작업 제어 셸, 회선 규칙 설정 및 (시스템 Linux 운영 체제의 경우) 혼합에 도입된 바보 같은 고급 기능입니다.