📄 fork_sample.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -