c – 无法理解fork()输出
发布时间:2020-12-16 10:51:39 所属栏目:百科 来源:网络整理
导读:假设有一个PID = 1的进程,它运行以下代码: int a = fork();int b = fork();printf(“a: %d,b: %dn”,a,b); 让我们进一步假设将逐个给出新的PID,因此第二个给定的PID将是2,然后是3等. 可能的输出是: a:2,b:3a:2,b:0a:0,b:4a:0,b:0 我有一些麻烦试图理解上
假设有一个PID = 1的进程,它运行以下代码:
int a = fork(); int b = fork(); printf(“a: %d,b: %dn”,a,b); 让我们进一步假设将逐个给出新的PID,因此第二个给定的PID将是2,然后是3等. 可能的输出是: a:2,b:3 a:2,b:0 a:0,b:4 a:0,b:0 我有一些麻烦试图理解上面代码的输出,尤其是为什么a:0,b:4和a:2,b:3. 解决方法
你知道的
那么,让我们一步一步地看到这里发生了什么. 当调用fork()时,它会创建一个id为n的新子节点,然后在子节点0和父节点n中返回. 因此,假设我们的进程为pid 1,当第一个fork()被调用时,它会创建一个带有pid 2的进程,然后返回一个值. a将在进程2(子进程)中具有值0,并且在进程1(父进程)中将具有值2. 然后每个进程将调用fork()并将返回值分配给父进程中的b.在孩子中,b的值为0. 无论如何,我认为这个架构将简化理解: 主要开始: | | int a = fork(); // It creates a new process,and the old one continues going | |-------------------------| a = 2; /* Parent */ a = 0; // Child | | | | int b = fork(); int b = fork(); // Each one create a new process | | | |-----------------------------| | /* Child -> Parent */ // Child -> Child | a = 0; b = 4; a = 0; b = 0 | | | | |-----------------------------| /* Parent -> Parent */ // Parent -> Child a = 2; b = 3; a = 2,b = 0; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在VB.NET中使用LINQ to XML更新XML元素
- c# – 这个显示逻辑应该存在于ViewModel中还是映射层中?
- ReactiveCocoa 的RACMulticastConnection使用
- ruby-on-rails – 获取错误:在部署/迁移到Heroku时更新rub
- c# – 我可以在不询问用户的情况下发送异常报告吗?
- VB截取中英文混合字符串中若干半角单位长字串的函数
- c – 获取std :: future :: wait_for的已用时间
- C#添加PDF页眉——添加文本、图片到页眉
- mdp-config.xml中的一些要注意的地方
- swift3 – 如何在FSCalendar swift 3中更改事件数组的背景颜