销毁进程的过程:
1.释放资源。内存,文件等等
2.记账信息
3.将进程设置为僵尸状态
4.转存储调度。将CPU让给需要使用的进程。
进程退出的方法:
正常退出:
1.main函数退出
2.exit
3._exit
异常退出:
1.ctrl+c
2.abort
3.kill
//退出时执行注册函数
int on_exit(void (*function)(int ,//int 是退出码
void*),
void* arg); //退出处理函数的参数
等待过程:
pid_t wait(int *status);
//阻塞,知道有子进程退出才返回,status参数会得到子进程是如何死亡的
//返回值:被返回的子进程id,出错,返回-1
WIFEXITED)(status) //如果正常返回,返回真
WEXITSTATUS(status)//如果正常退出,得到推出码
WIFSIGNALED(status)//如果被信号打断退出,返回真
WIERMSIG(status) //如果是被信号打断,得到信号值
pid_t waitpid(pid_t pid,
int *status,
int options);// 0 WNOHANG
pid>0;等待进程id等于pid的子进程死亡
pid=0;调用者进程所在进程组的任何一个子进程死亡
pid=-1;等待任何一个子进程死亡
pid<-1;|pid|进程组的任何一个子进程死亡
进程空间替换
int execvp(const char *file,//了执行程序名
char* const argv[]);// main函数的参数