关于线程和父子进程的一些个人理解

首先需要明白的是:1.子进程和父进程的数据段是独立的,代码段是共享的;

                                2.子进程是父进程的拷贝(包括pc,所以在父进程执行到fork的时候,创建的子进程也是从fork下一条语句开始执行);

                                3.父进程终止,子进程会被指定一个新的父进程init(其PID为1);

                                4.主线程和其创建的子线程间是共享数据的,参考前面的文章;

所以下面代码中父线程关闭了文件流,并不影响子进程中读数据:

//fork.cpp : g++ fork.cpp -o fork
#include <iostream>
#include <sys/time.h>
#include <unistd.h>
#include <sys/types.h>
#include <fstream>
int which1=1;
std::ifstream fIn;

int main(int argc,char** argv){
	pid_t p1;
	fIn.open("test.txt");
	int a=1;
	if((p1=fork())==0){
		sleep(5);
		std::string mid;
		fIn>>mid;
		std::cout<<"str="<<mid<<std::endl;
		std::cout<<"a="<<a<<std::endl;
		std::cout<<"child process"<<std::endl;
	}else if(p1>0){
		fIn.close();
		a=2;
		sleep(1);
		std::cout<<"main process"<<std::endl;
	}
        sleep(1);
        std::cout<<"exit"<<std::endl;
}//main	


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值