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);

}

3 つのプロセスは printf から stdout にコンテンツを送信しますが、コードを実行するたびに、3 つのプロセスが 1 つずつ実行されることが判明し、期待する出力が表示されません。これは、CPU が速すぎるためであることがわかっています。期待する出力を確認することはほとんど不可能です。そのため、デッド ループである別のプログラムを次のように記述します。 while (1) { i++; CPU使用率を高くするために、しかし、私はまだ私が期待する出力を見ることができません. 私に何ができる?

4

1 に答える 1

0

特定のプロセスにどれだけの時間を与えるかは、OSのスケジューリングに完全に依存します。

したがって、多くのプロセスをフォークすると、1つのプロセスに与えられる時間が短くなり、目的の結果を得ることができます....

しかし、低負荷のCPUの場合、プロセスに与えられる時間はそれよりも長くなり、指定されたプロセスに割り当てられた時間量で何千もの出力を印刷するのに十分な時間を確保することが非常に可能になります。 ...

于 2012-12-03T08:10:58.570 に答える