以下是我的测试代码:
#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/