restart(2)를 사용하는 경우와 restart(8)를 사용하는 경우

restart(2)를 사용하는 경우와 restart(8)를 사용하는 경우

저는 C로 사용자 reboot정의 프로그램을 작성 중이며 .reboot(2)system("/sbin/reboot")

둘 다 런레벨을 reboot(8)변경 init 6하고 서비스를 정상적으로 종료한 다음 모든 파일 시스템을 마운트 해제합니다. 그러나 reboot(2)그것은 그 어느 것도 하지 않습니다.

언제 reboot(2)먼저 사용해야 합니까 reboot(8)?

(나는 매뉴얼 페이지에서 sync(2)이전에 무엇을 호출해야 하는지 알고 있습니다 reboot(2).)

답변1

지금 시스템을 재부팅하려면 다른 작업을 수행하지 말고, 실행 중인 다른 프로세스나 열려 있는 파일에 대해서도 상관하지 말고 시스템 호출 reboot(예 reboot(2): . 미리 전화하지 않는 경우도 거의 없습니다 sync.

시스템을 정상적으로 다시 시작하려면 프로세스가 완전히 종료될 때까지 시간을 두고 파일 시스템을 마운트 해제한 다음 유틸리티 reboot(예: reboot(8))를 호출하십시오.

꼭 물어봐야 한다면, reboot(8)맞습니다. 시스템 호출은 유틸리티가 "예, 끝났습니다. 시스템이 거의 정지되었습니다. 이제 프로세서를 재설정합니다"라고 말하는 방법이 필요하기 reboot때문에 만들어집니다 .reboot

답변2

reboot(8)즉시 다시 시작으로 실행하면 즉시 다시 시작할 수 있다는 점(init과의 모든 상호작용 건너뛰기)을 알아야 합니다 reboot -f. 이는 init가 런레벨 6에 진입한 후 실제로 시스템을 종료하는 방법입니다. 이 호출은 커널과 상호 작용하여 시스템을 물리적으로 재부팅(또는 종료)하도록 지시하는 방법 reboot(2)일 뿐입니다 . reboot(8)또한 ctrl-alt-delete 키 입력에 대한 init 프로세스 제어 반응을 허용하는 등의 다른 작업도 수행합니다.

일반적으로 사용자로서 재부팅/중지/전원 끄기 -f를 수행하려는 유일한 이유는 init 시스템이 손상된 경우입니다. 예를 들어 단일 사용자 모드에서 수동 시스템 복구(부팅 등)를 수행하는 경우입니다. 커널 명령줄 emergency또는 init=/bin/sh)을 사용합니다. 물론, sync(8)이 작업을 수행하기 전에 실행해야 합니다.

많은 초기화에서는 이 기능이 필요하지 않은 모드를 제공하므로 emergency간단히 일반 종료/다시 시작 기능을 사용하거나 쉘을 종료할 수 있습니다. rescue이러한 -f모드는 일반적으로 일반 사용자가 최후의 수단으로만 사용합니다. 물론, init를 사용하여 완전히 우회하는 경우 init=/bin/sh시스템을 정상적으로 종료해도 아무런 도움이 되지 않을 것입니다. 이 상황에서 셸을 종료하면 커널 패닉이 발생합니다.

답변3

reboot(2)API이므로 다음과 같은 경우 사용할 수 있습니다.구현하다 reboot(8)또는 시스템을 초기화하세요.

읽으면서 더 자세히 알아보세요매뉴얼 페이지.

관련 정보