在fork()系统调用中如何确保父进程先执行?

问题描述 投票:0回答:1

我在大学学习操作系统。 有一些方法可以使用 wait() 系统调用和 vfork() 确保子进程首先执行(在父进程之前)。

但是我没有找到一种方法来确保父进程首先执行(在子进程之前)。

我尝试使用 ussleep() 来延迟子进程,以便父进程首先执行,因为分时和现代处理器是多核的。 但我不认为这是一个可行的解决方案。(不确定它是否适用于所有系统)

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
    pid_t child_pid, pid, parent_pid;

    // Create a child process
    pid = fork();

    if (pid == -1) {
        perror("Fork failed");
        exit(1);
    }

    if (pid == 0) {
        This is the child process
        usleep(100000); // Add a small delay (1 millisecond) to allow the parent to run first
        printf("Child\n");
    } else {
        // This is the parent process
        printf("Parent\n");
        
    }
    return 0;
}

operating-system fork system-calls
1个回答
0
投票

大多数计算机(甚至是 2023 年运行 Linux 的廉价笔记本电脑)都有多个核心

事实上,父进程和子进程很可能同时在不同的内核上运行

但是我没有找到一种方法来确保父进程首先执行(在子进程之前)。

实际上,这是不可能的。两个进程同时运行。

您想要的是让这些进程通信同步

这可以使用多个系统调用来实现。 Linux 有数百个,在 syscalls(2) 中列出。

学习使用 pipe(2)poll(2)write(2)read(2)errno(3)sem_overview(7)shm_overview(7) ).

© www.soinside.com 2019 - 2024. All rights reserved.