以下是我的测试代码:
#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使用率高,但我仍然看不到我期望的输出。 我能做什么?
答案 0 :(得分:0)
完全取决于操作系统调度,因为它为特定进程提供了多长时间。
所以如果你分叉了很多进程,那么给一个进程的时间会少于你可以得到想要的结果 ....
但是在低负载CPU的情况下,给进程的时间变得更多,那么很有可能有足够的时间来打印数千个输出,因为它分配给给定进程的时间量,这就是为什么你得到了指定(由u)结果 ...