Linux中父子进程执行问题

很荣幸,小编今天又踩坑了

子进程是如何执行的?
我先说一下我自己认为这个问题的答案,通过fork()后将父进程代码段也复制,所以相当于在父进程fork()的位置添加一个断点,子进程执行的过程,就是断点之后的过程。

那么上一个代码,大家看一下:

//代码本来是用来测试kill效果的
  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<signal.h>
  4 #include<unistd.h>
  5 
  6 int main(){
  7 
  8     pid_t pid1=0;
  9     pid1=getpid();
 10     printf("pid1==%d",pid1);
 11 
 12     pid_t pid=fork();
 13     if(pid==0){
 14         int i=0;
 15         for(i=0;i<5;i++){
 16             sleep(1);
 17             printf("in son process\n");
 18         }
 19     }else
 20     {
 21 
 22         printf("in father process\n");
 23         sleep(2);
 24         printf("kill sub process now\n");
 25         kill(pid,SIGINT);
 26 
 27     }
 28     return 0;
 29 
 30 }

这个代码刚开始认为结果可能是正确的,就是父子进程执行,父进程掌控子进程关闭,虽然可能子进程睡眠时间比较短,但是不至于报错。
上结果:

pid1==3455in father process
pid1==3455in son process
in son process
kill sub process now

惊了!为啥pid1会输出两次!!!
后来才想会不会是因为缓冲区没有清空,导致两个进程执行时,都会在原有的进程上打印自己的输出。
后来修改代码:

  8     pid_t pid1=0;
  9     pid1=getpid();
 10     printf("pid1==%d\n",pid1);

此时,结果就正确了,想一想也是对的,进程会复制缓冲区,而产生进程前,缓冲区中就含有,而且没有添加\n(\n可以清空缓冲区,相当于endl),所以输出结果不太正确,导致小编还以为是子进程的执行理解有问题。
总结:输出要回车,缓冲会清空。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值