深刻理解fork调用

本文探讨了Linux系统调用fork()在创建进程时的工作原理。每次调用fork()都会返回两次,分别在父进程和子进程中。子进程是父进程的副本,但它们不共享数据空间。通过示例代码,我们观察到父进程与子进程并发执行的现象,并讨论了在子进程中使用return和exit的区别,以及未使用exit可能导致的意外行为。
摘要由CSDN通过智能技术生成

  fork()是linux中的系统调用函数,用于创建进程,创建失败返回-1,创建成功会返回两次(不是返回了两个值,而是返回了两次)。需要注意的是fork调用一次返回两次:对父进程而言它返回的是子进程的id,对子进程而言它返回0。

    子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。


#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>  // 系统调用的封装
#include<sys/wait.h>  //wait/waitpid时使用

int main()
{
	printf("父进程! pid=%d\n",getpid());
	pid_t p1id=fork();  //如果fork成功,会向父进程返回子进程的id,并向子进程0
	printf("第一次%d\n",(int)p1id);
	if(p1id<0)
	{
		printf("fork创建子进程1失败!\n");
		exit(1);
	}
	else if(p1id==0)
	{
		for(int i=0;i<9;i++)
			printf("这是子进程1,id为:%d,它的父进程id为:%d\n",(int)getpid(),(int)getppid());
		return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值