打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
进程控制
一.进程标识符
A.特殊进程
    0:调度进程,也叫交换进程,该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也称为系统进程。
    1:init进程,在自举过程结束时由内核调用,此进程负责在自举内核后启动一个unix系统。通常读与系统有关的初始化文件。
       它是普通用户进程,但是以超级用户特权运行。
    2:页守护进程,负责支持虚拟存储系统的分页操作。

B.linux开机启动详细流程
    1.BIOS加电自检:当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的.
    BIOS一方面检测连接硬件,比如显卡,内存,磁盘等等,检测的目的是以后把这些设备信息提供给操作系统,另一方面寻找启动磁盘,
    每一种BIOS都会有开机启动菜单,可以在菜单里设置以哪个设备启动系统,比如:光驱,硬盘,网络等等,这个菜单可以设置多个选项,
    依照设置次序在设备上寻找启动信息。找到了启动硬盘,接着BIOS就会在磁盘上找启动扇区,找到内核启动系统.首先试着寻找第一个扇区,
    也就是主引导记录MBR(Master Boot Record);如果第一个扇区上没有存在操作系统,再去寻找标记为BOOT的分区,不论是MBR还是BOOT分区,
    存储操作系统的空间都只有446字节;如果没有在上面提到的位置找到操作系统的内核,那么BIOS就无法继续启动工作.而我们的内核往往会大于446个字节,
    存放在磁盘的其他位置上,既然446字节装不下内核,又为了能顺利的找到放在其他位置上的内核,人们想出了一个办法就在446字节里写了一个小程序,
    当BIOS试着启动操作系统时就会执行这个小程序,然后再由小程序来载入其他位置的内核.这个小程序就是启动载入器(boot loader)。

    2.BOOT Loader:linux的boot loader(上文提到的小程序) 常见的有两种:lilo和grub。因为lilo存在着一个1024柱面的限制,
    并且更改了磁盘上的启动信息文件后需要重新启动系统才能同步446字节的内容,因为lilo的缺陷,已经被grub所取代.
    现在的绝大多数类linux系统都采用grub做boot loader;grub则没有了lilo各种限制,而且方便到能修改系统文件的启动内容就可以立刻与446内容同步.

    3.内核启动:内核启动后会向bios查询电脑的所有硬件信息,然后自己接手下来管理这些设备,以便提供给linux使用,内核会试着驱动这些设备,
    这些设备的驱动一部分包含在内核中,叫做静态驱动,一部分以模块的方式(动态)存放文件系统中,由于此时还未挂载任何文件系统,因此还不能使用
    文件系统中的模块,这里只能驱动在内核中存在的硬件驱动程序的对应设备.想驱动内核中未包含的硬件驱动就需要加载文件系统.内核会尝试挂载根文件系统,
    根文件系统至少包含 /etc /bin /sbin /lib /dev 这5大目录,他们5个缺一不可,都会导致系统无法启动,根文件系统挂载是以只读方式挂载的,
    因为这时linux还在启动阶段,并不稳定,避免破坏系统资料。

    4.启动INIT服务:顺利的挂载了根文件系统后,就会启动init服务。内核会按 /sbin/init->/etc/init->/bin/init顺序寻找init程序,如果找不到
    则内核报错 这里存在一个参数 init=/bin/sh 如果启动时指定了,则最后执行/bin/sh,而不会产生内核报错.也被称为快速启动,因为它忽略了很多启动
    初始化工作.启动init的目的就是为了初始化系统环境,启动了init就证明了内核已经顺利启动,接下来就由init服务来建立linux使用环境,init做了什么?
    它会读取 /etc/inittab 文件,根据这个文件的信息来进行初始化工作.它会执行三个脚本 /etc/rc.d/rc.sysinit, /etc/rc.d/rc ,
    /etc/rc.d/rc.local。rc.sysinit 主要的功能用来建立系统的基本环境;rc 脚本设置启动级别 linux中有许多不同的启动级别,不同的启动级别会制定
    不同的服务,根据指定rc的参数会对应执行 /etc/rc.d/rc[0-6].d/ 中的连接脚本文件。以S开头的则启动rc.local,前两个脚本都是系统至关重要的脚本,
    如果我们想在启动过程中放置一些其他程序,应该使用rc.local脚本, 因为S99local存在于rc[2-5].d中,三个RC脚本执行完毕后,就会建立虚拟主控制台,
    执行/bin/login就可以进入用户登陆界面了。所有的启动就都已经完毕,用户环境初始化,输入用户名和密码系统验证。

二.进程控制
    1.返回调用进程ID:pid_t getpid(void),需要的头文件<unistd.h>

    2.返回调用进程的父进程ID:pid_t getppid(void),需要的头文件<unistd.h>

    3.创建一个新进程:pid_t fork(void),需要的头文件<unistd.h>
      注意:fork函数被调用一次,返回两次。两次返回的唯一区别是子进程的返回值是0,而父进程的返回值是新子进程的进程ID。
      子进程获得父进程的数据空间,堆和栈的副本,并不共享存储空间,但是共享正文段。fork之后,父进程先执行还是子进程先执行是不确定的。
      fork失败的两个主要原因:系统中已经有了太多的进程,或者该实际用户ID的总数超过了系统限制。

    4.vfork函数的调用序列和返回值与fork相同,但语义不同。vfork保证子进程先运行,vfork与fork一样都创建一个子进程,但是它并不将父进程的地址空间
      完全复制到子进程中,因为子进程会立即调用exec或exit。

    5.僵死进程:一个已经终止,但是其父进程尚未对其进行善后处理的进程被称为僵死进程。一个由init进程领养的进程终止时,不会变成僵死进程。

    6.当提及“一个init的子进程“时,这指的可能是init直接产生的进程,也可能是其父进程已经终止,由init领养的进程。  

    7.wait和waitpid函数:
        头文件:include<sys/wait.h>
        用法:pid_t wait(int *statloc);pid_t waitpid(pid_t pid,int *statloc,int options);
        返回值:若成功则返回进程ID,若出错则返回-1.

        wait注意点:a.如果其所有子进程都还在运行,则阻塞。b.如果一个子进程已终止,正等待父进程获取其终止状态,
        则取得该子进程的终止状态立即返回。如果它没有任何子进程,则立即出错返回。如果一个子进程已经终止,并且是一个
        僵死进程,则wait立即返回并取得该子进程的状态,否则wait使其调用者阻塞直到一个子进程终止。参数statloc是一个整形指针,如果
        statloc不是一个空指针,则终止进程的终止状态就存放在它所指向的单元内。如果不关心终止状态,则可将该参数指定为空指针。有四个
        互斥的宏可用来取得进程终止的原因。
        
        wait和waitpid的区别:在一个子进程终止前,wait使其调用者阻塞,而waitpid有一个选项,可使调用者不阻塞。
        waitpid并不等待在其调用之后的第一个终止子进程,它有若干选项,可以控制它等待的进程。对于waitpid函数中pid参数的作用解释如下:
        pid == -1      等待任一子进程。与wait等效。
        pid > 0        等待其进程ID与pid相等的子进程。
        pid == 0    等待其组ID等于调用进程组ID的任一子进程。
        pid < -1    等待其组ID等于pid绝对值的任一子进程。
        
        waitpid提供了一个wait的非阻塞版本。参数WNOHANG,若由pid指定的子进程并不是立即可用的,则waitpid不阻塞,此时其返回值为0.

        8.exec函数:当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。因为exec并不创建新进程,
          所以前后的ID并未改变。exec只是用一个全新的程序替换了当前进程的正文,数据,堆和栈段。



































 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux服务器启动过程详解(引载)_江海川行
并行启动应用程序从而加速 Linux 的引导
Linux系统的启动过程
进程控制之exit和waitpid(wait)函数 - 缘起宇轩阁 - CSDN博客
Linux之僵尸进程
linux 0.11 内核 init main.c
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服