이것은 관련이있다 : https://stackoverflow.com/a/13413099/1284631Linux reboot() 시스템 호출 : kernel_halt() 다음에 do_exit (0)을 호출하는 이유는 무엇입니까?
지금, 질문은 다음과 같습니다
재부팅() 시스템 호출, LINUX_REBOOT_CMD_HALT
매개 변수를 사용하여 호출 할 때 (여기 참조 : http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480) 왜 이미 kernel_halt()
라고 한 후 do_exit(0)
를 호출, 전화 kernel_halt()
은 (http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/process.c#L519 참조)을 native_machine_halt()
(여기를 참조하십시오 : http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/reboot.c#L680 참조)의 일부로 호출합니다.
또는 stop_this_cpu()
이 절대로 돌아 오지 않는 것 같습니다 (무한 루프로 끝납니다).
따라서 kernel_halt()
이 작업을 수행하지 않아 반환되는 경우에만 호출되는 do_exit(0)
입니까? 대신 panic()
을 직접 쓰지 않는 이유는 무엇입니까?
패닉 커널 설치 중단, 종료, 아마도 재부팅 –
@eicto : 예, 동의합니다. 내 게시물의 끝 부분에서 같은 말을했습니다. 진짜 질문은 : do_exit (0) * 호출이 panic() 전에 호출되는 이유는 무엇입니까? 커널을 멈추게하거나 종료하거나 다시 부팅하려면 panic()을 직접 호출하지 않는 것이 좋습니다. – user1284631