fork创建进程
2015-11-18 23:17
239 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> int main(int argc,char *argv[]) { pid_t child; int count = 100; printf("Parrent process [%d] start...\n",getpid()); printf("Parrent [%d] start create child process:\n",getpid()); child = fork(); //fail if(child < 0) { printf("Parrent process [%d] create child fail!\n",getpid()); printf("%s\n",strerror(errno)); return -1; } else if (child == 0) { printf("count = %d",++count); printf("Child process [%d] ,parrent [%d]\n",getpid(),getppid()); printf("child process [%d] finish,quit!\n",getpid()); exit(0); } else { sleep(1); printf("Parrent process [%d] create child [%d] sucess\n",getpid(),child); } printf("Only parrent do......[%d],count = [%d]\n",getpid(),count); return 0; } -------------------------------------解决僵尸程---------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> int main(int argc,char *argv[]) { pid_t child; int count = 100; printf("Parrent process [%d] start...\n",getpid()); printf("Parrent [%d] start create child process:\n",getpid()); child = fork(); //fail if(child < 0) { printf("Parrent process [%d] create child fail!\n",getpid()); printf("%s\n",strerror(errno)); return -1; } else if (child == 0) { sleep(3); printf("count = %d",++count); printf("Child process [%d] ,parrent [%d]\n",getpid(),getppid()); printf("child process [%d] finish,quit!\n",getpid()); exit(0); } else { //sleep(1); wait(); printf("Parrent process [%d] create child [%d] sucess\n",getpid(),child); } printf("Only parrent do......[%d],count = [%d]\n",getpid(),count); return 0; } -------------------------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <signal.h> void signal_handler(int sig_num) { switch(sig_num) { case SIGCHLD: { wait(); } break; } } int main(int argc,char *argv[]) { pid_t child; int count = 100; signal(SIGCHLD,signal_handler); printf("Parrent process [%d] start...\n",getpid()); printf("Parrent [%d] start create child process:\n",getpid()); child = fork(); //fail if(child < 0) { printf("Parrent process [%d] create child fail!\n",getpid()); printf("%s\n",strerror(errno)); return -1; } else if (child == 0) { sleep(3); printf("count = %d",++count); printf("Child process [%d] ,parrent [%d]\n",getpid(),getppid()); printf("child process [%d] finish,quit!\n",getpid()); exit(0); } else { //sleep(1); //wait(); while(1) { printf("Parrent process [%d] create child [%d] sucess\n",getpid(),child); sleep(1); } } printf("Only parrent do......[%d],count = [%d]\n",getpid(),count); return 0; } --------------------------------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <signal.h> void signal_handler(int sig_num) { switch(sig_num) { case SIGCHLD: { wait(); } break; } } int main(int argc,char *argv[]) { pid_t child; int count = 100; //signal(SIGCHLD,signal_handler); printf("Parrent process [%d] start...\n",getpid()); printf("Parrent [%d] start create child process:\n",getpid()); child = fork(); //fail if(child < 0) { printf("Parrent process [%d] create child fail!\n",getpid()); printf("%s\n",strerror(errno)); return -1; } else if (child == 0) { sleep(3); printf("count = %d",++count); printf("Child process [%d] ,parrent [%d]\n",getpid(),getppid()); child = fork(); if(child == 0) { while(1) { printf("child child [%d] [%d]\n",getpid(),getppid()); sleep(1); } } else { printf("child process [%d] finish,quit!\n",getpid()); exit(0); } } else { //sleep(1); //wait(); while(1) { printf("Parrent process [%d] create child [%d] sucess\n",getpid(),child); sleep(1); } } printf("Only parrent do......[%d],count = [%d]\n",getpid(),count); return 0; }
相关文章推荐
- github SSH authentication
- python之自动化生成解析ini文件的Qt类
- asn1学习笔记 约束
- ubuntu14.04,由于安装软件造成磁盘空间不足,无法登入Gnome解决办法!!
- asn1学习笔记 约束
- Android 接口定义语言AIDL使用解说
- 无法启动tomcat服务器,屏幕一闪而过
- GitHub Desktop离线包以及使用解析
- Android Studio 导入Volley模块后 gradle的修改。
- js烟花特效
- FFMPEG SDK 开发介绍(原创)
- 用java实现计算String类型的四则运算——用栈和后缀表达式实现
- 利用xShell实现windows与虚拟机的文件交换
- 免费赠与c/c++海量视频 学习资料的
- ORACLE ORA22922 不存在的LOB值解决方法
- 面试cookie
- Linux sublime text3输入中文的问题.
- 学习PMP第一步
- 2. Spring4.1-Java Config
- shell入门-sed-2替换功能