方法一:
1、使用fork函数,参考该文//没有对子进程回收。
#include#include #include #include int main() { pid_t pid; for(int i = 0;i<2;i++) { pid = fork(); if(pid<0) { perror("fork()"); }else if(pid == 0){ i += 100; printf("child,i=%dn",i); //子进程 exit(0);//很重要一定要加上 }else{ printf("fathern"); //父进程 } } return 0; }
以上代码实现功能,父进程不断创建子进程,同时执行i++操作,子进程执行任务。
注意:1)子进程运行结束后,一定要exit,退出。
2)父进程执行i++,后,再执行的第二次fork,此时i的值为1。
2、僵尸态
#include#include #include #include int main() { pid_t pid; for(int i = 0;i<2;i++) { pid = fork(); if(pid<0) { perror("fork()"); }else if(pid == 0){ i += 100; printf("child,i=%dn",i); //子进程 exit(0);//很重要一定要加上 }else{ printf("fathern"); //父进程 } } sleep(1000);///添加此条代码,会使子进程先退出,成为僵尸进程 return 0; }
如上图,待父进程sleep结束后,僵尸态的子进程成为孤儿进程,从而被init接管,init待孤儿进程退出后,释放资源。
僵尸进程短时间 存在是正常的。
3、回收子进程操作//这样程序才完整
#include#include #include #include #include int main() { pid_t pid; for(int i = 0;i<2;i++) { pid = fork(); if(pid<0) { perror("fork()"); }else if(pid == 0){ i += 100; printf("child,i=%dn",i); //子进程 exit(0);//很重要一定要加上 }else{ printf("fathern"); //父进程 } } //int status; for(int i = 0;i<2;i++)//创建了几个子进程,就要wait几次!!!!! { //wait(&status); wait(NULL); } return 0; }
或者参考该文
注意:wait()调用一次,只能回收一个子进程!!!!!!!!



