
배경:
- SSH를 통해 Ubuntu 서버에 연결
- tmux 실행 및 분리
tmux의 PPID가 1인 이유는 무엇입니까? tmux 런타임 메커니즘에 대한 정보가 있습니까?
답변1
tmux
클라이언트-서버 아키텍처에서 실행됩니다. 쉘에서 실행할 때마다 tmux
쉘의 하위 클라이언트를 실행합니다. ( tmux
비쉘에서 실행하는 것이 가능합니다 . 예를 들어 에서 직접 sshd
실행하면 이 세부 사항은 아무것도 변경하지 않습니다.)
tmux
tmux
클라이언트는 사용자와 연결된 서버를 찾으려고 합니다 . 서버를 찾을 수 없으면 때때로 클라이언트가 불만을 표시하고(예: tmux attach-session
) 때로는 서버를 시작한 다음(예: tmux
와 동등한 단독 tmux new-session
) 작업을 수행합니다.
모든 클라이언트의 임무는 tmux
서버와 통신하여 서버가 작업을 수행하도록 하는 것입니다.
tmux
서버를 시작해야 할 경우 clone(2)
자체적으로 서버를 시작합니다. 결과 자식 프로세스는 즉시 clone
다시 실행된 다음 종료됩니다. 최신 프로세스가 실제 tmux
서버 가 되어부모가 사망했기 때문에 PPID는 1입니다.. 중간 프로세스의 유일한 작업은 서버를 상위 프로세스로부터 "분리"하는 것 같습니다.
tmux
내 생각에는 서버가 일부 클라이언트의 직계 자식이고 tmux
클라이언트가 죽은 후에만 PPID가 1이 되는 경우에 작동할 수 있다고 생각합니다 . 의 요점은 tmux
원래 클라이언트가 분리된 후에도 계속 실행되는 서버를 갖는 것입니다. 따라서 서버가 일부 클라이언트의 하위 서버라면 어쨌든 조만간 고아가 될 가능성이 높습니다. 그리고 일반적으로 tmux
클라이언트는 자식의 자식을 모니터링하고 신호를 보내는 등의 시도를 할 수 있는 모든 셸이나 다른 프로세스에서 실행될 수 있으므로 가능한 한 빨리 서버를 고아로 만드는 것이 합리적입니다.
따라서 서버는 거의 즉시 PPID 1을 얻습니다. 실행하는 모든 셸이나 다른 프로세스는 tmux
서버의 하위 항목입니다. (다시) 연결한 후에는 클라이언트가 표시하는 내용을 볼 수 있습니다. 클라이언트 자체는 호출한 셸(또는 sshd
기타 항목)의 하위 항목입니다. 서버와 통신하여 키 입력을 전달하고 창이 어떻게 생겼는지에 대한 정보를 받아 그에 따라 문자를 인쇄합니다.
서버는 일단 시작되면 내부의 모든 세션이 종료될 때까지 실행됩니다. 즉, 정상적으로 종료하려면 창인 모든 셸(또는 기타 프로세스)을 종료해야 합니다.
이 아키텍처는 처음 호출된 환경은 tmux
보존될 수 있지만 일반적으로 클라이언트의 환경은 tmux
중요하지 않은 이유를 설명합니다. 서버는 첫 번째의 손자로서 시작되므로 tmux
환경을 상속받을 수 있습니다. 그 이후에는 모든 것이 서버에 달려 있습니다. 서버가 실행되는 동안에는 서버나 새로 생성된 프로세스(창)가 이 클라이언트의 하위 항목이 아니기 때문에 이후 클라이언트로부터 직접적인 상속이 없습니다. 보다내 이 대답.