• UNIX环境高级编程--9. 进程控制


    进程关系
        当子进程终止时,父进程得到通知并能取得子进程的退出状态。

    终端登录:
        早起UNIX系统通过哑终端登录,本地的终端 or 远程的终端 。主机上链接的终端设备是固定的,所以同时登录数也就有了已知的上限。直到出现了映射图形终端的出现,
    开发出了窗口系统,它向用户提供了与主机系统进行交互的新方式。(通过shell)

    Linux系统启动过程详解(参考:butbueatiful.blog.chinaunix.net):
        第一步:加载BIOS
            当打开计算机电源后,首先会加载BIOS,BIOS里面存储的信息太重要了,计算机的必须的硬件信息都存在里面,比如:CPU相关信息、
            设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在完成了第一步之后,计算机就知道接下来该去where找who了。
        第二步:读取MBR
            MBR(Master Boot Record)主引导记录。存放在第0磁道 第一个扇区,大小512字节。里面存放了预启动信息、分区表信息,
            将BIOS指定的硬盘的MBR内容复制到内存中。成为:Boot Loader(grub)。
        第三步:Boot Loader
            Boot Loader就是在操作系统内核运行之前运行的一段小程序。通过这段程序,初始化硬件设备,建立内存空间的映射图,
            为最终调用系统内核做好准备。
        第四步:加载内核
            根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压操作,系统这时会提示“Uncompressing Linux”。当解压完成
            后,屏幕输出“OK。booting the kernel”。
            系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列初始化设备,完成Linux核心环境的建立。至此,内核已经建立起来
            基于linux的程序可以运行了。
        第五步:用户层init依据inittab文件来设定运行等级
            内核被加载后,第一个运行的程序是/sbin/init ,该文件会读取/etc/inittab文件,并依据次文件初始。
            /etc/inittab文件最主要的作用是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。
            Linux的运行等级设定如下:
                0:关机
                1:单用户模式
                2:无网络支持的多用户模式
                3:有网络支持的多用户模式
                4:保留,未使用
                5:有网络支持有X-Window支持的多用户模式
                6:重新引导系统,即重启
        第六步:init进程执行rc.sysinit
            在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、
            设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。
        第七步:启动内核模块
            具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
        第八步:执行不同运行级别的脚本程序
            根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
        第九步:执行/etc/rc.d/rc.local
            你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
            # This script will be executed *after* all the other init scripts.
            # You can put your own initialization stuff in here if you don’t
            # want to do the full Sys V style init stuff.
            rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。    
        第十步:执行/bin/login程序,进入登录状态
            
    会话:
        会话(session)是一个或多个进程组的集合。
        用户可以在前台或后台启动一个作业。一个作业只是几个进程的集合,通常是一个进程管道。例如:
        vi main.c      /* 在前台启动了只有一个进程组成的作业 */
        pr *.c | ipr &
        make all &        /* 在后台启动了两个作业 这两个作业调用的所有进程都在后台运行*/
        
    控制终端:
        一个会话可以有一个控制终端。通常是终端设备或伪终端(在网络登录情况下)。
        建立与控制终端链接的会话首进程被成为控制进程。
        
    作业控制:
        允许在一个终端上启动多个作业(进程组),它控制哪一个作业可以访问该终端以及哪些作业在后台运行。当然还需要内核的一些对作业控制的支持。
        
    shell执行程序:
        
    孤儿进程组:
        一个其父进程已终止的进程成为孤儿进程(orphan process),这种进程由init进程“收养”。
        整个进程组也有可能成为孤儿。
        一个进程组中的每个进程的父进程都是其他会话中的进程,那么该进程组叫做孤儿进程组。
        
        
        
    每天学一点linux命令:
    ps -o pid, ppid, pgid, sid, comm
        ps:进程查看命令。 -o : 按照用户定义的格式显示。
        ppid:父进程id    pgid:组ID    sid:会话ID    comm:指令
    管道命令: ps -o pid, ppid, pgid, sid, comm | cat
        将前面命令的输出作为后面cat命令的输入

  • 相关阅读:
    bugKu getshell
    XCTF 进阶区 CAT
    php弱类型比较
    XCTF command_execution
    关于错误 openssl/ssl.h:没有那个文件或目录的解决办法
    libffi-dev : 依赖: libffi6 (= 3.2.1-4) 但是 3.2.1-4kord 正要被安装
    如何查看 Ubuntu下已安装包版本号
    git 下载指定tag版本的源码
    ubuntu 环境 openstack 源码包制成 deb 包
    fedora 国内源
  • 原文地址:https://www.cnblogs.com/luntai/p/6169207.html
Copyright © 2020-2023  润新知