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

终端登录:
    早起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命令的输入

UNIX环境高级编程--9. 进程控制的更多相关文章

  1. Unix环境高级编程(六)进程控制

    本章介绍Unix的进程控制,包括进程创建,执行程序和进程终止,进程的属性,exec函数系列,system函数,进程会计机制. 1.进程标识符 每一个进程都有一个非负整数标识的唯一进程ID.ID为0表示 ...

  2. UNIX环境高级编程--8. 进程控制

    进程控制进程标识:    每一个进程都有一个非负整型表示的唯一进程ID.虽然唯一,但是ID可以复用.当一个进程结束后,其进程ID会被延迟复用.    ID=0的进程通常是调度进程,常被称作交换进程(s ...

  3. Unix环境高级编程——守护进程记录总结(从基础到实现)

    一.概念及其特征 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程 ...

  4. Unix环境高级编程(八)进程关系

    本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用.通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态.先将本章基本的知识点总结如下,日后再看时候 ...

  5. Unix环境高级编程(五)进程环境

    本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制. ma ...

  6. UNIX环境高级编程——Linux进程地址空间和虚拟内存

    一.虚拟内存 分段机制:即分成代码段,数据段,堆栈段.每个内存段都与一个特权级相关联,即0~3,0具有最高特权级(内核),3则是最低特权级(用户),每当程序试图访问(权限又分为可读.可写和可执行)一个 ...

  7. UNIX环境高级编程——守护进程列表

    amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源治理Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库Autofs:自动安装治理进程automount ...

  8. UNIX环境高级编程——守护进程

    一.守护进程简介 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系 ...

  9. (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. 恶补数论(二) Baby-Step-Giant-Step 大步小步求离散模对数

    知识概述 好吧,我承认这是我初三寒假就听过的知识,然而我现在早就高一了(又是寒假,只不过我已经在省选了...) 额,这是求离散模对数的一种算法 也就是求满足方程a^x≡b(mod p)的最小的x(其中 ...

  2. Dubbo 是一个分布式服务框架

    Dubbo 是一个分布式服务框架-----http://www.cnblogs.com/chanshuyi/p/5144288.html

  3. zoj 3812 状压dp

    转载:http://blog.csdn.net/qian99/article/details/39138329 题意:给出n个物品,每个物品有两种属性Wi,Ti,有q组查询,每组查询要求在n个物品中选 ...

  4. linux下安装并配置vim

    1.安装:sudo apt-get install vim-gtk  安装好后vim,并按“tab”键,可以看到vim的存在,则安装好2.设置更加人性化:sudo vim /etc/vim/vimrc ...

  5. 遇到很多次,要注意区分service调用,本地用户调用这些区别

    WTSQueryUserToken返回1314   The WTSQueryUserToken function obtains the primary access token of the log ...

  6. JVM内存分布和垃圾回收

    内存区域划分   程序计数器(Program counter Register) 描述  程序计数器(Program Counter Register)是一块较小的内存空间.它可以看作是当前线程执行的 ...

  7. xtrabackup 恢复单表步骤

    1.apply-log应用redo日志,并导出表的数据字典innobackupex --apply-log --export  备份集 2.建表 如果知道表结构,则重建删除的表 create tabl ...

  8. 16、Java并发性和多线程-死锁

    以下内容转自http://ifeve.com/deadlock/: 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁.死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候. 例如, ...

  9. 字符串的切割操作(strtok,split)

    一:strtok C/C++:char *strtok(char s[], const char *delim); s 代表须要切割的字符串,delim代表切割的标志,參数都为比选!返回指向切割部分的 ...

  10. HLJU 1188 Matrix (二维树状数组)

    Matrix Time Limit: 4 Sec  Memory Limit: 128 MB Description 给定一个1000*1000的二维矩阵,初始矩阵中每一个数都为1,然后为矩阵有4种操 ...