Linux-进程控制中的函数

本文对比了fork()和vfork()两种创建进程的方法。详细解释了这两种方法在资源复制方面的不同,即fork()会在创建子进程时复制父进程的所有资源,而vfork()则与父进程共享地址空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()不会复制父进程资源,与父进程共享地址空间  ​    ​

    ​    ​    ​


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值