感觉学到了一个关于:
printf的缓冲机制,如果在父进程中prinf("+")之后,这里的printf直接将内容放到缓冲区,这个时候再创建子进程的时候,缓冲区里的内容也会被一起给复制了。
解决方法:
1.每次printf(“...\n”).相当于刷新缓冲区
2.利用
其中创建进程之后使用
fflush(stdout);
这里推荐一篇关于讲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;
}
好吧这篇文章根本就没有什么意义
还是看别人的文章