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下寻找,不会在当前目录下寻找)

  • 相关阅读:
    修改BeEF工具默认密码
    Metasploit发布了新版本5.0.83
    抓包概念大比较:数据报、数据包、分组
    Metasploit reload命令使用技巧
    Metasploit设置VERBOSE参数技巧
    了解 JavaScript (3)- 马上开始
    了解 JavaScript (2)- 需要了解的一些概念
    了解JavaScript(1)- Hello World
    ASP入门(二十三)- 数据库插入、更新和删除操作
    ASP入门(二十二)-连接数据库
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4143103.html
Copyright © 2011-2022 走看看