zoukankan      html  css  js  c++  java
  • 第8章进程控制总结

    1 父子进程的程序空间

     子进程获得父进程的数据空间、堆、栈的副本,即不共享这些空间

     父子进程共享正文段

     不过现在又很多实现采用COW写时复制技术,即共享空间,发生修改时只为修改区域制作副本

    2 文件共享

     父子进程各自维护进程表项(记录有文件描述符、文件描述符标志、文件表指针)

     父子进程共享文件表(记录当前文件偏移量、文件状态标志、v节点指针)

     一个文件只有一个v节点表

    3 vfork

     vfork创建的子进程目的是为了调用exec函数

     在调用exec函数之前,父子进程共享程序空间(因为调用exec之后,子进程将访问另外的程序空间,调用exec之前没必要单独为子进程复制父进程的程序空间)

     vfork保证子进程先运行,直到子进程调用exec或exit函数后父进程才开始运行

    4 wait

    pid_t wait(int *status)
    
    pid_t waitpid(pid_t pid,int *status,int option)

     wait函数等待所有子进程中的一个进程终止,将终止状态写入status并返回子进程ID

     waitpid函数通过pid、option决定是否阻塞的方式等待某个子进程

     对于wait获取的子进程终止状态,可以通过以下宏来判断:

    WIFEXITED(status)
    WIFSIGNALED(status)
    WIFSTOPPED(status)
    WIFCONTINUED(status)

     waitpid函数再添加一个参数,用来获取子进程的资源使用情况即为wait4函数:

    pid_t wait4(pid_t pid,int *status,int option,strcut rusage *rusage)

     wait3函数不指定子进程pid

    5 exec函数

    int execl(const char *pathname,const char *arg0,.../*(char *)0 */)
    int execv(const char *pathname,char *const argv[])

     execl和execv函数的pathname参数指定执行程序的路径(绝对路径、相对路径、或直接是当前目录下的文件名)

     exelce和execve添加char *const env[]参数传递环境变量

     execlp和execvp的第一个参数如果不是路径名,则在PATH的路径下找执行文件(如果是文件名只会在PATH下寻找,不会在当前目录下寻找)

  • 相关阅读:
    ADB server didn't ACK * failed to start daemon *
    老调重弹:年龄大了,码农何去何从(转)
    HR给应届生的黄金面试技巧
    Android自动开关机实现
    [Android实例] Android ShakeDetector(摇晃检测)教程详解
    Hadoop : MapReduce中的Shuffle和Sort分析
    获得和裁剪图片
    android bitmap compress(图片压缩)
    知识签名(signature of knowledge)
    SVN安装(eclipse)
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4143103.html
Copyright © 2011-2022 走看看