C++语法 进程相关函数

C++语法 进程相关函数

C++ 函数fork

fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;

引用一位网友的话来解释fpid的值为什么在父子进程中不同。其实就相当于链表,进程形成了链表,父进程的fpid(p 意味point)指向子进程的进程id,因为子进程没有子进程,所以其fpid为0。

fork出错可能有两种原因:
1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
2)系统内存不足,这时errno的值被设置为ENOMEM。

使父进程得到子进程ID返回值的理由是:因为一个进程的子进程可以有多个。
使子进程得到返回值0的理由是:一个进程只能有一个父进程。
子进程和父进程会继续执行fork调用之后的指令。子进程会获得父进程数据段,堆和栈的副本。父进程和子进程共享正文段。

C++函数Bind

// 1 使用占位符先占位,然后执行时再传参
auto staticFunc1 = std::bind(&StaticBindFunc, std::placeholders::_1, std::placeholders::_2);
staticFunc1(1,2);

// 2 使用一个占位符先占位,然后执行时传一个参
auto staticFunc2 = std::bind(&StaticBindFunc, std::placeholders::_1, 4);
staticFunc2(3);

C++ 函数exec函数

exec函数
当子进程调用exec函数来运行另一个程序时,这个进程的地址空间代码和数据都被新程序的代码和数据刷新替换。及进程程序发生了替换。
换言之,就是说,当我们调用exec函数时,并不会创建新的进程,而是换了代码段的段中内容,没有给换段,没有换进程,所以调exec后id号不变。
1.exec函数组的作用是程序替换,如果替换成功则即将运行的代码段的内容已经不是以前的代码段的内容了,而是新程序,因此原来代码中位置在exec函数以后的代码不会运行,除非出错,不然没有执行的可能。因为代码段被替换,因此在替换以后的原代码都不会被执行,因为代码段里已经没有这些代码了。
2.程序替换只是替换代码段,初始化了数据区域,因此程序替并不会重新创建虚拟地址空间,和页表。也是替换了其中的内容。
3.替换后这个进程将从入口函数开始运行。
4.所以只有调用exec函数失败时,才有返回值,成功就没有返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值