읽다Stephen의 훌륭한 답변 중 하나, 차이점이 무엇인지 알고 싶습니다.
언제운영 체제폐쇄. ...
그리고
언제핵심shutdown,... (...커널이 아닌 외부 명령을 사용하여 종료하는 변형을 고려 중입니다.)
?
"외부 명령을 사용하여 종료하는 변형"은 "운영 체제를 종료할 때"입니까, 아니면 "커널을 종료할 때"입니까?
즉, "외부 명령을 사용하여 종료를 고려 중인 변형이 커널이 아닙니다"라는 것은 무엇을 의미합니까?
시스템 호출 여부재시작()OS 또는 커널을 재부팅하시겠습니까?
이 명령은 reboot
커널 대신 OS를 재부팅합니까?
감사해요.
답변1
당신이 인용한 게시물에는 실제로 다음과 같은 내용이 나와 있습니다.
커널이 종료되거나 다시 시작될 때 프로세스에 신경 쓰지 않고 프로세스를 종료하지 않습니다(바라보다
reboot()
자세히 알아보기 외부 명령 종료 사용을 고려 중인 변형은 커널이 아닙니다.).
당신의 선택 편집자는 관련 없는 문장을 이어붙여 잘못된 인상을 만들었습니다.
유지한 부분(세미콜론 뒤)은 세미콜론 앞 부분(삭제함)과 관련됩니다. 즉, 변종재시작()Stephen의 목적에 따라 LINUX_REBOOT_CMD_RESTART2
외부 명령을 사용하여 닫는 것은 고려 대상에서 제외됩니다(문서에서 링크됨).
첫 번째 인용문은 관련이 없습니다.
답변2
그는 커널 자체와 나머지 운영 체제(커널 위에 구축된 사용자 공간 구조) 사이의 차이점을 알아차린 것 같았습니다.
또는 이에 상응하는 명령(systemd 또는 일부 초기화 스크립트 등을 호출함)을 사용하여 시스템을 종료하면 /sbin/reboot
단순히 커널에 종료를 요청하는 것 이상의 작업을 수행합니다. 사용자 공간 도구는 파일 시스템 마운트 해제, SIGTERM
다른 프로세스에 종료 요청 등을 보내는 등 거의 모든 정리 작업을 수행합니다.
대신 가서 전화하면reboot()
시스템 호출루트로 직접 실행하면 정리가 발생하지 않으며 커널은 지시된 작업만 수행하고 즉시 종료됩니다(아마도 재부팅하거나 시스템을 종료함). 매뉴얼 페이지에는 reboot()
와 동일한 작업을 수행하지 않으므로 sync()
커널(파일 시스템 드라이버 및 I/O 버퍼가 있는 곳) 내에서 수행할 수 있는 정리 작업도 수행하지 않는다고 나와 있습니다.
매뉴얼 페이지의 예를 들면 다음과 같습니다.
LINUX_REBOOT_CMD_RESTART
(RB_AUTOBOOT, 0x1234567). The message "Restarting system." is
printed, and a default restart is performed immediately. If
not preceded by a sync(2), data will be lost.
그래서,
시스템 호출이
reboot()
운영 체제나 커널을 재부팅합니까?
커널을 종료하거나 다시 시작해야 하며 운영 체제도 종료해야 합니다.
이 명령은
reboot
커널 대신 OS를 재부팅합니까?
종료하려면 사용자 공간 프로세스, 추가 정리 및 작업이 필요합니다.그때야커널 종료 또는 재부팅이 필요합니다.
시스템 호출 reboot()
모드 ( LINUX_REBOOT_CMD_RESTART2
)가 있는데, 이를 "명령 문자열 사용"이라고 설명합니다. 그러나 이는 사용자 모드 명령이 아니라 커널 내부 명령을 의미하며 x86에서도 사용되지 않습니다.
커널과 커널 위에 있는 운영 체제 간의 차이점을 고려하는 동안 원칙적으로 운영 체제를 재부팅하고 커널은 계속 실행될 수 있습니다. 커널 재부팅을 요구하는 대신 사용자 공간에 의해 설정된 모든 것을 정리하고 다른 사용자 공간 프로세스를 종료한 다음 재부팅하여 init
모든 것을 다시 복원해야 합니다. 그러나 이는 그다지 유용하지 않을 수 있으며 커널에 남아 있는 모든 상태를 안정적으로 재설정하기가 어렵습니다(모든 네트워크 인터페이스를 수동으로 재설정하고, iptables 규칙을 정리하고, RAID 및 루프 장치를 재설정하는 등의 작업이 필요합니다. 일부를 놓칠 가능성이 매우 높습니다. 나중에 역효과를 낳을 수도 있는 일.)