c - 在循环内运行 fork 会产生意想不到的结果(测量进程切换时间)

标签 c operating-system

我正在编写一个程序来测量执行进程切换所需的时间。为了做到这一点,我让 parent 向其 child 写一个字节的消息,然后 child 阅读它。

我的问题是在这个循环中:

for(i=0; i<2; i++)
{
    if(fork()==0) //child process, read
    {
        close(pipefd[1]);
        read(pipefd[0]);
        close(pipefd[0]);
    }

    else //parent process
    {
        close(pipefd[0]);
        write(pipefd[1]);
        close(pipefd[0]);
    }
}

为了测试 fork 撞击父子对象的频率,我放入了一个 printf 语句,我在屏幕上打印了大约 15 个语句。考虑到循环应该只运行两次,这怎么可能?

最佳答案

这是因为每个子进程都会创建其他进程。

if block 执行后,每个 child 将在循环开始时返回并再次fork(),直到i == 2在所有子进程中。

编辑:

为了避免这种情况,我建议使用这样的东西:

if(fork() == 0)
{
    //Do stuff
    break;
}

也许这不是最优雅的方式,但它应该可行。

关于c - 在循环内运行 fork 会产生意想不到的结果(测量进程切换时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28579508/

相关文章:

memory-management - 为什么说内核在进程地址空间中?

c - 结构体指针前向声明?

c - 使用 gdb 调试 C 预处理器宏中的崩溃

c++ - 增加初始化列表中使用两次的变量 - 未定义的行为?

c - 如果 stdin 满了会怎样?

networking - 传输层在哪里运行?

multithreading - 在什么意义上,每个线程对于操作系统来说都是一个单独的 CPU?

c++ - 如何 "hide"头文件里面的一个变量?

C 重复数组

python - 在 Python 中编译 C++ 程序时 try catch 由于语法引起的操作系统错误