今天我们来说一说进程的创建,终止,等待。
1、进程的创建
创建一个进程我们用到的函数是fork函数,它从已存在的进程中创建一个新的进程,新进程为子进程,而原进程为父进程。
fork函数:
#include <unistd.h>
pid_t fork(void);
子进程返回0,父进程返回子进程的id,出错返回-1。
值得注意的是,父进程和子进程共享代码,数据是“写时拷贝”。
fork也有调用失败的时候,fork调用失败的原因:
1、系统中有太多的进程。
2、实际用户的进程数超过了限制。
下面是利用fork函数实现创建进程的代码。
运行结果
2、进程的终止
进程退出的情况:
(1)代码运行完毕,结果正确。
(2)代码运行完毕,结果不正确。
(3)代码异常终止。
进程的退出方法:
I 正常终止(可通过 echo$?查看退出码)
(1)从main返回
(2)调用exit
(3)_exit
II异常退出
ctrl + c ,信号终止。
今天我们来通过调用exit来实现进程终止
#inclue <unistd.h>
void exit(int status);
运行结果
这里我们使用echo $?查看了一下,返回码为0。
3、进程等待
进程等待的必要性:
(1)避免内存泄漏。
(2)我们需要知道父进程派给子进程的任务完成的如何。
(3)进程变成僵尸状态,无法杀死。
(4)父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。
进程等待的方法
(1)wait方法
(2)waitpid方法
实现进程等待的代码
运行结果