1.进程退出
上面是标准c库函数
下面是linux库函数
#include#include #include int main(){ printf("hellon"); printf("world");//在缓冲区里系统_exit没有刷新缓冲区所以没有显示 //exit(0); //系统退出前会刷新缓冲区 _exit(0); return 0; }
2.孤儿进程
孤儿进程会被分配给进程号为1的进程回收资源
#include#include #include int main(){ //创建子进程 pid_t pid = fork(); //判断是父进程还是子进程 if(pid > 0){ printf("i am parent process,pid : %d, ppid : %dn",getpid(),getppid()); } else if(pid==0){ sleep(1); printf("i am child process, pid : %d, ppid : %dn",getpid(),getppid()); } for(int i=0;i<3;i++){ printf("i : %d , pid : %d n",i,getpid()); } return 0; }
3.僵尸进程
产生原因:父进程不回收已经结束的子进程资源,子进程自己只能释放用户区数据,内核区数据必须由父进程释放
避免:父进程必须释放子进程资源
解决方法:wait()函数或者waitpid()函数 或者在控制端直接kill -9 杀死父进程(注意这种方式杀死僵尸进程无效!!!)
#include#include #include int main(){ //创建子进程 pid_t pid = fork(); //判断是父进程还是子进程 if(pid > 0){ while(1) { printf("i am parent process,pid : %d, ppid : %dn",getpid(),getppid()); sleep(1); } } else if(pid==0){ printf("i am child process, pid : %d, ppid : %dn",getpid(),getppid()); } for(int i=0;i<3;i++){ printf("i : %d , pid : %d n",i,getpid()); } return 0; }



