systemd 사용자 인스턴스( systemd --user
)를 사용할 때 사용자가 만든 각 데몬은 해당 인스턴스의 소유입니다. 예를 들어:
- 데몬을 생성해보자:
nohup sleep 100 0<&- &>/dev/null &
. PID가 있습니다12549
. 상위 터미널 프로세스를 종료하거나 쉘을 직접 종료하여 데몬 프로세스로 만듭니다. 이 프로세스의 새로운 부모는 systemd 사용자 인스턴스입니다.
UID PID PPID C STIME TTY TIME CMD phylliade 12549 20280 0 17:21 ? 00:00:00 sleep 100 phylliade 20280 1 0 09:23 ? 00:00:00 /usr/lib/systemd/systemd --user
그러면 어떻게 이런 일이 일어났습니까? 프로세스 상위 프로세스가 종료되면 커널은 일반적으로 init(여기서는 기본 systemd)를 새 상위 프로세스로 지정하고 systemd는 사용자 systemd에 데몬 프로세스를 할당합니까?
답변1
상위 프로세스를 종료하고 [...] 데몬으로 만듭니다.
아니요, 없습니다. 데몬은 제어 터미널 또는 로그인 세션과 연결되어 있지 않습니다. 실행 중인 프로세스는 nohup
여전히 존재합니다. 결국 그것이 아니었다면 체조에는 아무 의미가 없을 것입니다.제어 터미널 정지 무시.
상위 프로세스가 종료되면 커널은 일반적으로 init[...]를 새 상위 프로세스로 할당합니다.
아니요, 없습니다. 자식의 사신으로 표시된 가장 가까운 조상 프로세스를 할당하거나 그러한 조상 프로세스가 없으면 프로세스 #1로 대체됩니다. 세상은 변했습니다.
Upstart, nosh toolset service-manager
및 systemd는 모두 이를 활용합니다. 세 가지 프로젝트 모두의 사용자별 서비스 관리에는 로컬 수확기가 포함됩니다.
추가 읽기
- https://unix.stackexchange.com/a/177361/5132
- systemd는 관리되는 프로세스의 하위 프로세스 종료를 어떻게 처리합니까?
- https://unix.stackexchange.com/a/390089/5132
- 조나단 데보인 폴라드(2018).
local-reaper
. nosh 도구 세트 매뉴얼 페이지. 소프트웨어.