导航:首页 > 文件类型 > linuxfork文件

linuxfork文件

发布时间:2023-03-12 11:31:18

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一样能够实现同样的效果。

阅读全文

与linuxfork文件相关的资料

热点内容
文件名加标题 浏览:644
共享数据怎么被冻结了 浏览:150
如何登记考勤数据 浏览:640
苹果6s前置照片效果 浏览:171
企业微信素材库文件下载链接 浏览:582
pdf文件怎么取消标黄 浏览:781
打电话时不能使用网络是什么原因 浏览:919
ps怎么将文件合并 浏览:747
java的日期格式化 浏览:981
电脑应用程序怎么关 浏览:986
微信上链接在哪个文件夹 浏览:691
欧姆龙安装打开找不到密钥文件 浏览:302
苹果基本表情 浏览:128
我的世界教育版编程在哪里 浏览:842
pong文件夹找不到 浏览:759
69版本黑切 浏览:997
杭州道富java 浏览:635
知道qq号查微博账号和密码 浏览:294
红手指自带哪些app 浏览:103
手机用公司网络会被监控哪些 浏览:409

友情链接