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");continue;}if (!pid) {//进入子进程操作//关闭 父进程的3个描述字close(0);close(1);close(2);//分开父进程和子进程会话setsid();//子进行拷贝终端描述字(void) open("/dev/tty1",O_RDWR,0);(void) dup(0);(void) dup(0);//子进程运行shell_exit(execve("/bin/sh",argv,envp));}while (1)//如果为父进程等待子进程完成后退出当前循环if (pid == wait(&i))break;//打印子进程结束信息。printf("\n\rchild %d died with code %04x\n\r",pid,i);//数据同步,把缓存区的数据写到磁盘sync();}//父进程结束_exit(0);
}

void init(void) 分析 ! \linux-1.0\init\main.c相关推荐

  1. void start_kernel(void)分析 ! \linux-1.0\init\main.c

    //启动系统内核 //asmlinkage 为通过堆栈传递参数,默认为通过寄存器传递参数. asmlinkage void start_kernel(void) { /** Interrupts ar ...

  2. linux init进程原理,Linux 系统下 init 进程的前世今生

    原标题:Linux 系统下 init 进程的前世今生 Linux系统中的 init 进程 (pid=1) 是除了 idle 进程 (pid=0,也就是 init_task) 之外另一个比较特殊的进程, ...

  3. linux init.d 密码,Linux基础之init.d、rc.local

    linux系统操作中另两个经常遇到的文件夹-init.d与rc.local,先来说init.d: 在redhat中init.d的位置在/etc/rc.d/init.d,如果说init.d的作用就必须提 ...

  4. Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)

    前言 init进程,它是一个由内核启动的用户级进程,当Linux内核启动之后,运行的第一个进程是init,这个进程是一个守护进程,确切的说,它是Linux系统中用户控件的第一个进程,所以它的进程号是1 ...

  5. Android7.0 init进程源码分析

    目的 看过一些blog和相关的书籍,大多数文章在介绍init进程时,参考的代码比较久远,同时不同文章行文的重点不太一样,因此决定自己试着来分析一下,并作相应的记录. 背景 当linux内核启动之后,运 ...

  6. init/main.c中的void init(void)

    init进程调用的init函数 1.setup((void*)&drive_info); a.setup函数用的是main.c中Line 25的inline _syscall1(int,set ...

  7. Linux 启动流程即init程序分析--2

    3.upstart介绍     upstart是一个基于事件的init的替代程序,这意味着服务的启动和停止都基于事件的通信. upstart 正在由 Scott James Remnant 进行开发, ...

  8. Linux init程序分析

    http://blog.csdn.net/zhoudaxia/article/details/6666872 1.init程序剖析     init进程是内核引导过程完成时创建的第一个进程.Linux ...

  9. 3. Linux系统启动分析-从start_kernel到init进程的启动

    ##################################### 作者:张卓 原创作品转载请注明出处:<Linux操作系统分析>MOOC课程 http://www.xuetang ...

最新文章

  1. 利用RNN训练Seq2Seq已经成为过去,CNN才是未来?
  2. centos7安装vsftpd
  3. Go版本升级后编译出错:Load redeclared in this block
  4. Anisotropic gauss filter
  5. 豆瓣评分9.4!这部大片你不应该错过,每一秒都是不敢看的残忍!
  6. TMS320F28335——IO控制/定时计操作
  7. CodeForces - 766C - Mahmoud and a Message dp
  8. e - 数据结构实验之查找五:平方之哈希表_leetcode算法之哈希表
  9. Springboot2.0访问Redis集群
  10. win10默认壁纸_Win10瞬间审美爆炸,5分钟一键美化,不输万元Mac!
  11. VBS教程(入门级)
  12. 小微风控之财务评分模型的制定与应用
  13. win10关闭自动屏保
  14. Ubuntu 数字小键盘不能用解决方法
  15. 通信教程 | 波特率、比特率、通信速度的区别
  16. 十余款新品惊艳亮相,华为春季旗舰新品发布会看点满满
  17. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'user' 附近有语法错误
  18. 2020交通改善与交通安全专辑
  19. python读取usb数据_PyUSB:从USB设备读取
  20. 谷歌翻译用不了修复方法记录

热门文章

  1. 基于linux 的2048
  2. 服务端渲染与 Universal React App
  3. Linux驱动开发必看详解神秘内核(完全转载)
  4. maven 添加本地库
  5. 艾伟也谈项目管理,我是如何带领团队开发项目的
  6. Android Camera 2.0 Api
  7. Android应用开发—Application
  8. JVM对象占用内存计算
  9. 数据结构与算法--9.常见时间复杂度及其之间的关系
  10. java byte md5_Java开发网 - byte[]按自定义编码转换成String(MD5)