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

标签 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太快了,几乎不可能看到我期望的输出。所以我编写了另一个程序,这是一个死循环,就像这样: while(1) { 我++; } 为了提高CPU使用率,但我仍然看不到我期望的输出。 我能做些什么?

最佳答案

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

所以如果你 fork 了很多进程,那么分配给一个进程的时间就会少于你可以获得所需的结果....

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

关于c - 如何观察父进程和子进程之间的资源争用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13677026/

相关文章:

c - C高级题: Please explain C construct *({ foo(&bar); &bar; })

C - 创建具有与输入相关的数组数量的结构

c++ - 在 OSX 上,Valgrind 报告此内存泄漏,它来自哪里?

c - 如何在 Linux 中记录多线程进程的线程堆栈

c - 需要知道 fork 是如何工作的吗?

linux kill命令-9 vs -15

objective-c - 将 C 与 Objective C 混合

c - C 中的结构 - 不打印整个字符串

bash - 如何等待脚本生成的所有子(和孙子等)进程

java - Processbuilder 抛出 IO 异常