1.在父进程中定义变量n,在子进程中对变量n进行++操作;并且打印变量n的值,打印子进程pid;
2.在父进程中打印变量n的值,并且打印父进程pid。
3.要求分别用fork和vfork创建子进程
源代码:
fork.c
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc,char*argv[])
{
int num=1;
int pid;
pid=fork();
if(pid<0)
{
printf("fork error!\n");
return 0;
}else if(pid==0)
{
printf("this is child,pid:%d,num:%d\n",getpid(),++num);
exit(0);
}else
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc,char*argv[])
{
int num=1;
int pid;
pid=fork();
if(pid<0)
{
printf("fork error!\n");
return 0;
}else if(pid==0)
{
printf("this is child,pid:%d,num:%d\n",getpid(),++num);
exit(0);
}else
{
sleep(2);
printf("this is parent,pid:%d,num:%d\n",getpid(),num);
}
return 0;
}
sleep(2);
printf("this is parent,pid:%d,num:%d\n",getpid(),num);
}
return 0;
}
vfork.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int num = 1;
int pid;
pid = vfork();
if(pid <0 )
{
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int num = 1;
int pid;
pid = vfork();
if(pid <0 )
{
printf("vfork error!\n");
return 0;
}else if(pid == 0)
{
printf("this is child,pid:%d,num:%d\n",getpid(),++num);
_exit(0);
}else
{
printf("this is parent, pid:%d, num:%d\n",getpid(), num);
}
return 0;
}
解析
在vfork内++后,父进程的相应变量也会++
而在fork内++后,fork内的变量会++,但是父进程中的变量不变。
fork------参考: 点击打开链接
https://blog.csdn.net/qq_37192076/article/details/80391337
return 0;
}else if(pid == 0)
{
printf("this is child,pid:%d,num:%d\n",getpid(),++num);
_exit(0);
}else
{
printf("this is parent, pid:%d, num:%d\n",getpid(), num);
}
return 0;
}
解析
在vfork内++后,父进程的相应变量也会++
而在fork内++后,fork内的变量会++,但是父进程中的变量不变。
fork------参考: 点击打开链接
https://blog.csdn.net/qq_37192076/article/details/80391337