首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用fork()函数处理父进程和子进程?

如何使用fork()函数处理父进程和子进程?
EN

Stack Overflow用户
提问于 2022-09-07 09:11:02
回答 1查看 92关注 0票数 2

我正在编写一个程序,该程序将从1打印到10,但我希望前五个数字由子进程打印,最后5个应该由父进程打印:

代码语言:javascript
运行
复制
#include <unistd.h>
#include <stdio.h>
#include "process.h"

/**
 * main - Entry point for my program
 *
 * Return: On success, it returns 0.
 * On error, it returns 1
 */
int main(void)
{
        int id = fork();
        int n, i;

        if (id == 0)
                n = 1;
        else
                n = 6;
        for (i = n; i < n + 5; i++)
                printf("%d\n", i);
        return (0);
}

产出如下:

代码语言:javascript
运行
复制
6
7
8
9
10
1
2
3
4
5

我是UNIX进程的新手,所以我不明白为什么要首先打印父进程输出(从6-10)。父进程的执行是否优先于子进程?如果我想让子进程先运行(即先打印1-5),我怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-11 15:54:30

这做你想做的事:

代码语言:javascript
运行
复制
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>

/**
 * main - Entry point for my program
 *
 * Return: On success, it returns 0.
 * On error, it returns 1
*/
int main(void)
{
    int id = fork();
    int n, i;

    if (id < 0) {
        perror("fork failed: ");
        exit(1);
    } else if (id == 0) {
        n = 1;
    } else {
        int status, cid;
        n = 6;
        cid = wait(&status);
        if (cid != id) {
            perror("fork failed: ");
            exit(1);
        }
    }
    for (i = n; i < n + 5; i++) {
        printf("%d\n", i);
    }
    return (0);
}

为了让孩子们走第一步,我们做了几项改变。

succeeded.

  • Several

  • 添加了一个带有()的id < 0检查,以打印错误。
  • 添加了一个对id < 0()的调用,以允许子节点在父循环之前退出。
  • 检查从id < 0返回的消息,以确保为used.
  • Formatting更改(基本上无关)的函数添加了id < 0头。

在测试中,这是输出:

代码语言:javascript
运行
复制
1
2
3
4
5
6
7
8
9
10
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73632840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档