操作系统实验之进程

感觉学到了一个关于:

printf的缓冲机制,如果在父进程中prinf("+")之后,这里的printf直接将内容放到缓冲区,这个时候再创建子进程的时候,缓冲区里的内容也会被一起给复制了。

解决方法:

1.每次printf(“...\n”).相当于刷新缓冲区

2.利用

其中创建进程之后使用
fflush(stdout);

这里推荐一篇关于讲linux中fork()讲的特别好的博客:(我稍微理解操作系统的开始)

linux fork() 进程入门

如何创建父进程和它的两个子进程?(两个子进程都要由该父进程产生 而不是子进程再产生子进程)

法1:奇思妙想:通过循环的话,子进程也会产生就它的子进程,然后就乱了。然后想着通过控制子进程的变量,不让它继续生成进程了。简单的话用这个还好,难一点的话就会因为变量设置问题gg.

(ps.后来才知道,子进程不想让它再进行了,直接return 0就行了)

#include <stdio.h>                                                                                   
#include <unistd.h>

int main(){
    int i = 0, id = 0;
    printf("father process: pid: %d\n", getpid());
    for(i = 0; i < 2; i++)
    {   
        id = fork();
        if(id < 0)//错误
            printf("error\n");  
        else if(id == 0)//子进程
        {   
            i = 2;
            printf("child process: pid: %d\n", getpid());
        }   
    }   
    return 0;
}

法2:正常走向,创建子进程,然后判断返回值,如果=0表示为子进程不进行处理,如果>0表示父进程,这时再创建进程。

缺点:不好扩展,难道要我创建10个进程的时候,我写10个嵌套if吗??

#include <stdio.h>
#include <unistd.h>

int main(){
    int i, j;
    printf("father process: pid: %d\n", getpid());
    i = fork();
    if(i < 0)//错误
        printf("error\n");
    else if(i > 0)//父进程
    {   
        j = fork();
        if(j == 0)
            printf("child process: pid: %d\n", getpid());
    }   
    else
        printf("child process: pid: %d\n", getpid());
    return 0;
}

好吧这篇文章根本就没有什么意义

还是看别人的文章

一个父进程创建多个子进程

猜你喜欢

转载自blog.csdn.net/qq_37430374/article/details/86506979