void init(void)
{
int pid,i;
//设置环境信息
setup((void *) &drive_info);
//打印提示语句
sprintf(term, "TERM=con%dx%d", ORIG_VIDEO_COLS, ORIG_VIDEO_LINES);
//打开终端1
(void) open("/dev/tty1",O_RDWR,0);
//拷贝打开的描述字1 ,2;
(void) dup(0);
(void) dup(0);
//运行初始化函数
execve("/etc/init",argv_init,envp_init);
execve("/bin/init",argv_init,envp_init);
execve("/sbin/init",argv_init,envp_init);
/* if this fails, fall through to original stuff */
//启动子程序
if (!(pid=fork())) {
//子程序操作
//关闭父进程打开的0描述字
close(0);
//打开自己的运行模式描述字
if (open("/etc/rc",O_RDONLY,0))
_exit(1);
//再执行shell命令。
execve("/bin/sh",argv_rc,envp_rc);
_exit(2);
}
//父进程往下运行。
if (pid>0)
// 等待子程序退出
while (pid != wait(&i))
/* nothing */;
//子程序退出后,父进程做补充操作
while (1) {
//再循环启动子进程
if ((pid = fork()) < 0) {
printf("Fork failed in init\n\r");
c
void init(void) 分析 ! \linux-1.0\init\main.c
最新推荐文章于 2022-08-16 23:24:00 发布
这篇博客详细解析了Linux 1.0版本中`init`函数的主要流程,包括设置环境信息、打开终端、执行初始化脚本以及通过`fork()`创建子进程执行`/bin/sh`。当`execve()`失败或子进程结束时,父进程会进行相应的处理,如重启子进程、同步数据等。
摘要由CSDN通过智能技术生成