⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fork_sample.c

📁 Linux网络编程PPT和源码,供学习参考
💻 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 + -