一、进程相关操作与编程对应函数

1.进程创建:两种方式来实现。

①fork:创建一个子进程,父子进程共享一份代码程序,但是各有一份独立的数据,为了效率和保持数据的独立采用写时复制技术(COW)。运行无优先级。

#include <unistd.h>
pid_t fork(void);

返回值:成功——子进程(0),父进程(子进程pid)、失败——(-1)

②vfork:创建一个新进程,子进程复制一份父进程的数据和堆栈空间(COW技术),继承父进程的用户代码、用户组、环境变量、打开的文件等资源,但是子进程不会继承父进程的文件锁定和未处理的信号。子进程优先执行,直到子进程调用exec函数或退出。在调用exec或exit之前,子进程和父进程的数据是共享的。

#include<unistd.h>
pid_t vfork(void);

返回值:成功——子进程(0),父进程(子进程pid)、失败——(-1)

2.进程等待

①wait:直到有信号来到或所有子进程结束时父进程才恢复执行。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值status。

#include<sys/types.h>
#include<sys/wait.h>
pid_t wait (int * status);

返回值:成功——子进程PID,失败——(-1)

②waitpid:指定等待的进程。

#include<sys/types.h>
#include<sys/wait.h>
pid_t waitpid(pid_t pid,int * status,int options);
Pid:欲等待的子进程识别码
    pid <-1 等待进程组识别码为pid绝对值的任何子进程。
    pid =-1 等待任何子进程,相当于wait()。
    pid = 0 等待进程组识别码与目前进程相同的任何子进程。
    pid > 0 等待任何子进程识别码为pid的子进程
options 通常设置成0
参数解释

相关文章: