Linux-进程控制中的函数

举报
远航 | FIBOS 发表于 2020/12/01 23:34:19 2020/12/01
【摘要】 1.几个创建进程函数的对比     ​#fork():     ​    ​源码: #include #include #include #include int main() { pid_t pid; if((pid=fo...

1.几个创建进程函数的对比

    ​#fork():

    ​    ​源码:

#include #include #include #include int main()
{
	pid_t pid;
	if((pid=fork())<0)
	{
		printf ("fork error!\n");
		exit(1);
	}
	else if(pid == 0)
	{
		printf ("in the child process!\n");
	}
	else
	{
		printf ("in the parent process!\n");
	}
	exit(0);
} 

    ​    ​执行结果:

    ​    ​    ​in the parent process!

    ​    ​    ​in the child process!

    ​    ​分析:fork()调用一次,返回两次,分别在父进程和子进程返回(但是顺序不确定)

    ​    ​    ​

    ​#vfork()

    ​    ​源代码:

#include #include #include int gvar=2;

int main(void)
{
	pid_t pid;
	int var=5;
	printf ("process id:%ld\n",(long)getpid());
	printf ("gvar=%d var=%d", gvar,var);

	if((pid=vfork())<0)
	{
		perror ("error!\n");
		return 1;
	}
	else if(pid==0)
	{
		gvar--;
		var++;
		printf("the child process id:%ld\ngvar=%d var=%d\n" ,(long)getpid(),gvar,var);
		_exit(0);
	}
	else
	{
		printf ("the parent process id:%ld\ngvar=%d var=%d\n" ,(long)getpid(),gvar,var);
		return 0;
	}
} 

    ​    ​执行结果:

    ​    ​    ​process id:12845

    ​    ​    ​gvar=2 var=5the child process id:12846

    ​    ​    ​gvar=1 var=6

    ​    ​    ​the parent process id:12845

    ​    ​    ​gvar=1 var=6

    ​    ​分析:若是把vfork()换成fork(),输入结果变为:

    ​    ​    ​    ​    ​    ​process id:12856

    ​    ​    ​    ​    ​    ​gvar=2 var=5the parent process id:12856

    ​    ​    ​    ​    ​    ​gvar=2 var=5

    ​    ​    ​    ​    ​    ​gvar=2 var=5the child process id:12857

    ​    ​    ​    ​    ​    ​gvar=1 var=6

    ​    ​    ​    ​  说明,fork()创建进程时会复制父进程的资源,而vfork()不会复制父进程资源,与父进程共享地址空间  ​    ​

    ​    ​    ​


文章来源: blog.csdn.net,作者:冰水比水冰,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/luoyhang003/article/details/40899797

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。