头文件
#include<unistd.h> #include<stdlib.h>原型
void _exit(int status); void exit(int status);_exit() os立刻把管理内存的结构体、虚拟内存释放掉。 exit() 不会马上干掉结构体,先看先看当前进程有没有文件缓存区,若有则会先处理缓存区中的数据,然后销毁结构体。
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { pid_t res; res = fork(); if(res == -1) { printf("fork err\r\n"); } if(res == 0) { //不加回车换行符,让输出的字符串数据保留在io缓存区里面 printf("son"); //退出状态设置为0,表示正常退出。 _exit(0); } else if(res > 0) { printf("parent"); exit(0); } }编译后执行结果
jl@jl-virtual-machine:~/test$ ./a.out parentjl@jl-virtual-machine:~/test$ jl@jl-virtual-machine:~/test$ 注意第二行开头的parent,因为在父进程中用的是 exit() 函数,在进程退出前会先处理完缓存区中的数据,所以缓存区中滞留的parent在推出前被打印出来。使用\r\n输出字符串则会被立即打印。