分类: LINUX
2008-10-29 17:43:29
# busybox/init/reboot.c - reboot_main()
return kill_init(SIGTERM);
# busybox/init/init_shared.c - kill_init()
return(kill(*pid, sig))
到这里,reboot实际完成了向init进程发送一个SIGTERM信号。到init的实现中查看相关的实现,
# busybox/init/init.c - init_main()
signal(SIGTERM, reboot_signal);
# busybox/init/init.c - reboot_signal()
init_reboot(RB_AUTOBOOT);
# busybox/init/init.c - init_reboot()
reboot(magic);
这里的reboot实际上调用了
# cross-compiling-include/sys/reboot.h
extern int reboot (int __howto) __THROW;
这样自然就会走到调用sys_reboot中
# kernel-src-path/kernel/sys.c
asmlinkage long sys_reboot(…)
{
…
machine_restart(NULL);