8.1 null
8.2 进程标识符
0,调度进程,交换进程。1是init进程。
getpid(进程ID), getppid(父进程ID), getuid(实际用户ID), geteuid(有效用户ID), getgid(实际组ID), getegid(有效组ID).
8.3 pid_t fork(void);创建子进程。调用一次,返回2次。父进程返回值是子进程ID。子进程返回值是0。
写时复制(Copy-On-Write)。fork之后父进程还是子进程先执行不确定,取决于内核的调度算法。
两种用法1)父进程希望复制自己,但两者执行不同代码段。2)一个进程要执行不同的程序。子进程从fork返回后立即调用exec。
8.4 vfork,和fork相同,但是不完全复制父进程的地址空间。vfork保证子进程先运行,在它调用exec或exit之后才父进程才可能被调度运行。
8.5 exit。父进程先于子进程结束的。被init(ID为1)进程领养。子进程结束,父进程可以调用wait或waitpid获取相关信息。
子进程已死,父进程没对其善后处理的,该子进程称为僵尸进程。ps命令显示为Z。
8.6 调用wait或waitpid:1)子进程运行,则block。2)子进程挂了,立即返回。3)无子进程,返回错误。waitpid有选项参数,可以控制。
等待指定子进程pid结束,使用waitpid。wait函数的非阻塞版waitpid。
进程fork两次,将第一个子进程退出,则第二个子进程的父进程相对于死亡,则有init进程(ID是1)接管,变成自由的进程。
8.7 waitid获取进程终止状态,和wait类似,但提供更多的灵活性。
8.8 wait3和wait4。查看手册看是否支持,然后再使用。
8.9
8.2 进程标识符
0,调度进程,交换进程。1是init进程。
getpid(进程ID), getppid(父进程ID), getuid(实际用户ID), geteuid(有效用户ID), getgid(实际组ID), getegid(有效组ID).
8.3 pid_t fork(void);创建子进程。调用一次,返回2次。父进程返回值是子进程ID。子进程返回值是0。
写时复制(Copy-On-Write)。fork之后父进程还是子进程先执行不确定,取决于内核的调度算法。
两种用法1)父进程希望复制自己,但两者执行不同代码段。2)一个进程要执行不同的程序。子进程从fork返回后立即调用exec。
8.4 vfork,和fork相同,但是不完全复制父进程的地址空间。vfork保证子进程先运行,在它调用exec或exit之后才父进程才可能被调度运行。
8.5 exit。父进程先于子进程结束的。被init(ID为1)进程领养。子进程结束,父进程可以调用wait或waitpid获取相关信息。
子进程已死,父进程没对其善后处理的,该子进程称为僵尸进程。ps命令显示为Z。
8.6 调用wait或waitpid:1)子进程运行,则block。2)子进程挂了,立即返回。3)无子进程,返回错误。waitpid有选项参数,可以控制。
等待指定子进程pid结束,使用waitpid。wait函数的非阻塞版waitpid。
进程fork两次,将第一个子进程退出,则第二个子进程的父进程相对于死亡,则有init进程(ID是1)接管,变成自由的进程。
8.7 waitid获取进程终止状态,和wait类似,但提供更多的灵活性。
8.8 wait3和wait4。查看手册看是否支持,然后再使用。
8.9