0

以下是我的测试代码:

    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main()
    {
pid_t pid;

/* create first child process */
pid = fork();
if (pid < 0) {
    perror("fork error");
    exit(1);
}

if (pid > 0) {            // parent process
    pid = fork();
    if (pid < 0) {
        perror("fork error");
        exit(1);
    }

    if (pid > 0) {        // parent process
        for (int i = 0; i < 100; i++) {
            printf("aaaaaaaaaaa\n");
        }
    } else {               // second child process
        for (int i = 0; i < 100; i++) {
            printf("cccccccccc\n");
        }
    }
} else {                   // first child process
    for (int i = 0; i < 100; i++) {
        printf("bbbbbbbbbb\n");
    }
}

exit(0);

}

这三个进程将内容打印到标准输出,但是每次我运行代码时,事实证明这三个进程一个接一个地运行,我看不到我期望的输出。我知道这是因为 cpu 太快了,几乎不可能看到我期望的输出。所以我编写了另一个死循环程序,就像这样:while (1) { i++; } 使 cpu 使用率高,但我仍然看不到我期望的输出。我能做些什么?

4

1 回答 1

0

它完全取决于操作系统调度,因为它为特定进程提供了多少时间。

因此,如果您分叉很多进程,那么分配给一个进程的时间会更少,那么您可以获得所需的结果....

但是在低负载 CPU 的情况下,分配给进程的时间变得更多,那么很有可能有足够的时间在分配给给定进程的时间段内打印数千个输出,这就是为什么你得到指定的(由你)结果...

于 2012-12-03T08:10:58.570 回答