fork_sample.c
来自「Linux网络编程PPT和源码,供学习参考」· C语言 代码 · 共 58 行
C
58 行
#include <sys/types.h>#include <unistd.h>#include <sys/wait.h>int main(int argc,char *argv[]){ pid_t child; int i=0,j=0; int w=20; pid_t who; int state; char message[128]; child=fork(); //创建子进程 if (child==0) { int k; i=3; w=100; printf("a child w=%d\n",w); //w为全局变量,会被修改 sleep(3); strcpy(message,"i'm a child"); printf("a child id %d\n",getpid()); //打印子进程的PID exit(7); //退出,返回7 } else if(child>0) { i=5; printf("w value=%d\n",w); //打印全局变量w的值,与子进程无关 printf("parent id=%d\n",getpid()); strcpy(message,"i'm parent"); } child=fork(); //再创建一个子进程 if(child==0) { printf("b child id=%d\n",getpid()); //打印第二个子进程的PID sleep(5); exit(4); } waitpid(child,&state,WNOHANG); //不等待第二个子进程结束,不挂起父进程继续运行 printf("child not finish\n"); while((who=waitpid(-1,&state,0))>0) //等待所有子进程结束,返回子进程PID { if(WIFEXITED(state)) //子进程正常结束(宏定义) { printf("child exit code %d\n",WEXITSTATUS(state)); printf("parent child id %d\n",who); } } //printf("parent child id %d\n",who); for(j=0;j<i;j++) { printf("%s\n",message); sleep(1); } sleep(10); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?