Gilles는 Linux 커널이 종료되는 방법에 대한 훌륭한 답변을 다음 위치에 썼습니다.https://unix.stackexchange.com/a/122667/674
Linux 운영 체제(systemvinit 및 systemd의 경우)를 종료하는 방법을 알고 싶습니다. Linux OS와 유사한 부팅 순서를 기대하고 있습니다. 특히 SIGTERM 및 SIGKILL과 같은 신호나 다른 프로세스 간 통신 수단을 통해 프로세스가 서로 어떻게 알리는지 궁금합니다.
감사해요.
관련된:
"운영 체제가 종료될 때"와 "커널이 종료될 때"의 차이점은 무엇입니까?
운영 체제가 종료되면 서비스 관리자는 SIGTERM 및 SIGKILL을 해당 서비스에 보내야 한다는 것을 어떻게 알 수 있습니까?
답변1
systemd sysvinit
및 systemd의 경우 운영 체제를 종료하면 먼저 init
시스템을 종료해야 함(또는 재부팅하거나 전원을 꺼야 함) 프로세스(pid 1인 프로세스)에 알립니다.
sysvinit
/run/initctl
이는 FIFO를 사용하여 와 통신하고 init
적절한 실행 수준으로 전환하도록 요청함으로써 수행됩니다 . 바라보다init
맨페이지간략한 개요를 알려주세요.
systemd는 이를 수행하는 여러 가지 방법을 지원합니다. 다양한 종류신호다양한 방법으로 종료, 재시작 등을 요청하는 데 사용할 수 있습니다. 또한 d-bus(busctl
맨페이지이를 탐색하는 방법을 설명합니다).
pid 1이 종료되도록 요청되면 해당 구성 및 사양을 따르고 모든 적절한 단계를 수행합니다. 여기에는 일반적으로 종료가 발생하고 있음을 모든 사용자에게 알리고, 실행 중인 모든 서비스를 종료하고(systemd를 사용하여 관리, 다양한 형태의 종료 스크립트 사용 sysvinit
), 마운트된 파일 시스템을 동기화하고, 마운트 해제할 수 있으며, 나머지 프로세스를 종료(일반적인 순서 사용)하는 작업이 포함됩니다. ), 마지막으로 적절한 매개변수를 사용하여 커널의 시스템 호출을 TERM
호출합니다 .KILL
reboot
이것은 일반적인 순서를 설명합니다. 액세스 제어(Polkit 사용), 사용 가능한 다양한 후크, kexec
갑작스러운 정전 처리, 처리 등 이 모든 것에는 더 많은 우여곡절이 있습니다. CtrlAltDel시스템 문서에서는 이러한 세부 사항을 많이 다루고 있습니다.