关于操作系统fork的记录

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处! https://blog.csdn.net/apersonlikep/article/details/89332257

关于操作系统fork的记录

由于fork()出来的子进程与父进程时并行执行的,所以在父进程结束后子进程还有可能存在(如果不让父进程等待子进程结束的话)

单次执行的代码

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
    int p1,p2;
    while((p1=fork())==-1);
    if(p1==0){
        putchar('b');
    }else{
        while((p2=fork())==-1);
        if(p2==0){
            putchar('c');
        }else{
            putchar('a');
        }
    }
    return 0;
}

由于不会在c里面写多次执行的方法,所以改用shell脚本调用可执行文件

for((a=0;a<10000;a++))
do
        ./a.out
        sleep 1
        echo -e "\n"
done

sleep主要是为了等本程序子进程执行完,不留到下一程序输出,测试一下还是有用的

ubuntu结果:

2150
    2 abc
 2147 acb
    1 bac
    1 bca

arch结果:

2150
2007 abc
  52 acb
  90 bac
   1 cab

结论:主要是系统的进程调度问题,在不同系统里面出现不同结果,是一个概率事件呢…我之前还以为是固定的=.=

猜你喜欢

转载自blog.csdn.net/apersonlikep/article/details/89332257