linux fork相关题目

来源:互联网 发布:h248协议端口号 编辑:程序博客网 时间:2024/06/14 07:21


这里写图片描述
求解可以采用如下的方式

这里写图片描述
i = 2的情况,在ubuntu下能打印出6个*


这里写图片描述


printf(“\n”) 与否例子

这里写图片描述

这里写图片描述

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

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


这里写图片描述

在main这个主进程中,首先执行 fork() || fork(), 左边的fork()返回一个非零值,根据||的短路原则,前面的表达式为真时,后面的表达式不执行,故包含main的这个主进程创建了一个子进程,
由于子进程会复制父进程,而且子进程会根据其返回值继续执行,就是说,在子进程中, fork() ||fork()这条语句左边表达式的返回值是0, 所以||右边的表达式要执行,这时在子进程中又创建了一个进程,
即main进程->子进程->子进程,一共创建了3个进程。


这里写图片描述

父进程和子进程关于数据和文件描述符的继承

http://blog.csdn.net/sharelearner/article/details/9705319

0 0