Linux征途——进程

  • 1、操作系统

        操作系统 = 内核 + 应用
        功能:操作计算机
        操作系统的定位:计算机管理员;对上提供良好的执行环境,对下管理软硬件资源
        库函数和系统调用接口的关系:库函数封装了系统调用接口。上下级的调用关系

Linux征途——进程

  • 2、进程

  • 1>初识

    对于用户:    运行中的程序
    对于操作系统:   操作系统对进程进行先描述后管理的一个结构体PCB(Process Control Block),在Linux里是task_struct

描述
标识符(PID)   进程状态
优先级 对内存的优先分配权
内存指针 找到代码段,即运行的程序
上下文数据,程序计数器 保存程序运行时间点
io状态信息 对文件状态的描述
记账信息 进程在CPU的运行时间
  •  2>查看进程

    ps -ef        e:f:树状显示                                        

  • 3>进程创建

    fork() 操作系统创建进程的接口
    fork通过对复制父进程创建一个新的的子进程
    复制:复制的是父进程的pcb,意味着子进程和父进程代码和数据指向的是同一块内存区域(数据和代码运行的完全一样),并且子进程拷贝了程序计数器,上下文数据所以当前的子进程是从子进程创建成功到的下一步指令开始运行的
    父进程代码共享,数据独有
    返回值:父进程返回的是子进程的pid,子进程返回的是0,通过返回值的不同,进行代码分流

  • 4>进程状态

    运行                R    
    可中断睡眠            S
    不可中断睡眠        D
    停止                T
    僵尸                Z            
                        危害:资源泄露
                        产生:子进程先于父进程退出。操纵系统通知父进程,父进程未处理,且操作系统未释放资源。
                        处理:退出父进程
                        预防:进程等待
    孤儿                父进程先于子进程退出。孤儿进程的父进程是pid为1的init进程.孤儿进程退出不会产生僵尸进程
    死亡
    追踪

  • 5>进程优先级

        功能:决定CPU资源有限分配权    priority 优先级 PRI   nice  renice   NI
        nice:程序运行时设置:nice -n x + 文件 renice -n  x -p + 进程号
        查看:ps -l
        设置:PRI = PRI + NI  PRI值越小优先级越高    nice -n  x  +文件
        nice取值范围:-20 ~ 19

  • 6>相关概念

    竞争性:进程竞争CPU资源,优先级产生
    独立性:各个进程相互独立
    并发/并行:CPU资源足够,同时运行则并行,不够切换运行,则并发

  • 7>环境变量

    功能:用于设置系统运行环境参数的变量    
    查看:env    echo $    ($表示后面的字符串是变量,不是字符串)
    声明:export        export str=1000
    删除:unset        unset str
    作用:让程序运行更加高效
    特性:全局特性
    获取:getenv()  char** environ main的第三个参数

  •     8>进程地址空间

   Linux征途——进程这是个彩蛋

  • 3、进程控制

  • >1、进程控制

       进程创建:
            fork():
                    复制:复制的是pcb。和父进程相同的上下文数据和代码段(只读性);代码共享,数据独有
                    返回值:父进程的返回值是子进程的PID,子进程的返回值是0。
       进程终止:
            终止类型
                正常终止:结果符合预期
                正常终止:结果不符合预期
                异常终止:崩溃
            终止方式:
                main中的return         exit()库函数:做完收尾工作释放资源       _exit()系统调用:直接释放系统资源才退出进程
        进程等待:等待子进程的退出;避免产生僵尸进程
                 等待接口:
                    wait(int* status)
                    waitpid(pid_t pid, int* status, int options)
                            status:获取子进程的返回值
                            pid:-1等待人意子进程退出
                                   0等待指定子进程退出
                            options:
                                    0 默认等待子进程退出
                                    WNOHANG 如果没与子进程退出,立即返回
         阻塞:为了完成操作发起的调用,但是当前如果不具备完成条件,则一直等待,直到完成操作。
         非阻塞:为了完成操作发起的调用,但是当前如果不具备完成条件,则立即报错返回        
         进程替换:替换进程所运行的程序
            将代码段虚拟地址经过页表所映射的物理地址区域替换成另一块内存中的代码的位置
            新的程序有自己运行的数据。意味着虚拟地址空间中不仅代码段映射位置改变了,并且数据段也需要重新初始化,映射到新程序数据段的位置
            接口:exec函数族
                    execl    exclp    execle  
                    execv    execvp    execve
            l和v的区别:命令行参数传递不同,l-参数平铺,以NULL结尾  v-字符串指针数组
            l:需要传递可执行程序文件全路径名
            le:传递全路径名,并且可以自定义进程的环境变量
            lp :只需要传递文件名
Linux征途——进程

                                                                                                           ”点我进入进程控制专题“