如何观察父进程和子进程之间的资源争用

时间:2012-12-03 04:13:45

标签: c process

以下是我的测试代码:

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

}

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

1 个答案:

答案 0 :(得分:0)

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

所以如果你分叉了很多进程,那么给一个进程的时间会少于你可以得到想要的结果 ....

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