#include <sys/types.h>
#include <sys/wait.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char buf[20] = "hello parent";//栈区
char *pb = new char[20];//堆
int n = 0;
pid_t pid = 0;
memset(pb, 0 ,20);
pb[0] = 'p';
if ((pid = fork()) < 0)
{
cout<<"fork error!"<<endl;
exit(1);
}
else if (pid == 0 ) //子进程
{
buf[0] = 'c';
pb[0] = 'c';
n = 1;
}
else
{
sleep(10);//让父进程休眠,子进程先执行
}
cout<<getpid()<<":n address "<<(&n)<<",n="<<n
<<"\tbuf address "<<(&buf)<<",buf="<<buf
<<"\tpb addrss "<<(&pb)<<",pb="<<pb<<endl;
exit(0);
}
输出结果为
15144:n address 0xbfe1f168,n=1 buf address 0xbfe1f170,buf=cello parent pb addrss 0xbfe1f16c,pb=c
15143:n address 0xbfe1f168,n=0 buf address 0xbfe1f170,buf=hello parent pb addrss 0xbfe1f16c,pb=p
15144是子进程,15143是父进程,它们之间的变量的地址是一样的(在各自的进程地址空间内),子进程修改了变量的值,但是却没有影响到父进程,说明了子进程中的变量是父进程的一个副本,不会因为子进程中改变了它们的值而影响
父进程,也就是子进程中具有父进程的数据段的副本。子进程和父进程共享的只是代码段。
fork是一个特殊的函数,它执行一次,返回两次,在子进程中返回0,父进程中返回子进程的pid。当执行了fork函数后,子进程和父进程就开始在fork之后产生分支了,父进程和子进程分别向下执行。由于父进程和子进程并没有公共的数据段,所以无法使用公共的数据段作为系统通信的载体,可以使用无名管道(fifo创建),或者有名管道(mkdifo创建后,产生管道名字,接着使用open打开读写)进行通信。
当子进程结束的时候,会向父进程发送一个SIGCHLD信号。因为子进程终止是个异步事件(可以在父进程允许的任何时候发送),这在信号也是内核向父进程发的异步通知。父进程可以选择忽略它,或者提供一个信号
分享到:
相关推荐
linux 多进程编程 forklinux 多进程编程 forklinux 多进程编程 forklinux 多进程编程 forklinux 多进程编程 forklinux 多进程编程 forklinux 多进程编程 forklinux 多进程编程 forklinux 多进程编程 forklinux 多...
创建新进程:fork函数:fork函数干什么? fork函数与vfork函数的区别在哪里?为何在一个fork的子进程分支中使用_exit函数而不使用exit函数?
linux_fork函数
fork一个进程,fork()函数fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,这个新产生的进程称为子进程。一个进程调用fork()函数后,系统先给新的进程...
linux内核 do_fork 函数源代码浅析。 经典讲解!
Linux系统编程的进程操作,C语言,明晰子进程的创建结构
1.3 进程的创建——do_fork()函数详解 19 1.4 执行进程间切换 33 1.4.1 进程切换之前的工作 33 1.4.2 进程切换实务 —— switch_to宏 37 1.4.3 __switch_to函数 39 1.5 fork与vfock系统调用的区别 42 1.6 内核线程 ...
在win系统下模拟linux中的fork()函数执行过程与基础通信过程 备注清晰。
1、利用fork函数创建新进程,并根据fork函数的返回值,判断自己是处于父进程还是子进程中; 2、在新创建的子进程中,使用exec类的函数启动另一程序的执行;分析多进程时系统的运行状态和输出结果; 3、利用最常用的...
1、fork()函数——进程创建函数。 2、getpid()函数——取得目前进程的进程标识码。 3、exit()函数——用来正常终结目前进程的执行。 4、sleep()函数——用来延时,它会被挂起,把处理器让给其他的进程。 5、...
系统调用fork( ), exec系列函数,exit( ), wait( )的功能和实现过程 使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示...
该事例程序属多进程调用小程序,采用了系统调用函数fork()进行子进程的调用。在该文档中介绍了fork()调用的相关细节及注意点以及父子进程段的关系。并将程序运行后输出到屏幕结果与输出重定向到文件后的结果进行比较...
linux 进程 线程 fork 的深入思考 一道面试题的思考
用fork创建子进程; 回答no执行父进程,yes执行父进程并复制进程的操作;在父进程将str3,str4接至str0中,并输出str0 ;在子进程中,将str1,str2接至str0中,并输出str0
里面是三个实验,分别是fork创建子进程,各个进程之间的关系,并发还是同步,以及子进程复制父进程代码的说明
易懂易用,对于初学者来说是个十分实用的对初学知识的巩固与了解。
Linux进程控制编程-fork子进程创建实例.pdf 学习资料 复习资料 教学资源
fork 函数详解
关于fork函数的介绍,和测试程序,原版fork linux平台
fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的...