❶ linux fork 会共享哪些东西
fork()不仅创建出与父进程代码相同的子进程,而且父进程在fork执行点的所有上下文场景也被自动复制到子进程中,包括:
—全局和局部变量
—打开的文件句柄
—共享内存、消息等同步对象
由于pipe调用相当于创建了2个文件句柄,因此在fork后这两个句柄也被自动复制到子进程中,对这两个句柄的操作效果与在主进程中的操作效果是一致的,这就使父子进程之间很容易通过该机制实现数据交换,如:
假设pipe产生的句柄为P[0],P[1],在fork后父子进程都拥有了P[0],P[1]句柄,那么:
—父进程可向自己的P[1]中写入数据,子进程从P[0]中即可读出该数据;切记此时父进程不能也从P[0]读数据,否则自己写入的数据可能先被自己读走了
—反之亦然,子进程向P[1]中写入数据后,父进程从P[0]中可读出该数据;切记此时子进程不要从P[0]读走数据
你可能难以理解为什么进程内部的数据读写会被传递到另一个进程,但别忘了,pipe匿名管道和文件,socket等一样是属于操作系统的管理对象,对其进行读写都是由OS的内核代码来进行控制的。在父进程调用pipe创建出管道后,该管道对象是存储在OS内部的,父进程得到的P[0]和P[1]都只是对该对象的引用(相当于指针);在fork出子进程后,子进程复制出的也只是同一个指针,所指向的还是OS中的同一个对象,这就是为什么父子进程能通过其进行互相通信的原因。
❷ 纯小白,请Linux怎么调用fork()创建两个子进程并运行
是的,需要在cpp里面调用fork,然后再执行exec。
下面是个例子:
pid_t pid = fork();
if (pid < 0) {
return;
}
else if (pid == 0) {
printf("child process!回!!!\n");
char *argv[] = { (char *)"tst_app", (char *)"xx", NULL };
execv("/usr/bin/tst_app", argv);
}
请采答纳,谢谢
❸ LINUX中fork.c文件作用
楼上的(回答者: 497820833 - 助理 二级 2009-7-10 17:20),
你添加了一个else,只是在fork发生异常时不需要再做后面两个分回支的判断答了,可以说意义不大,因为没有else一样能够实现同样的效果。