当前位置:  技术问答>linux和unix

一个父子进程、fork、waitpid的小问题

    来源: 互联网  发布时间:2017-05-15

    本文导语:  有这样一段代码: int main()  {   if(fork()==0){    print("a");   }   else{     printf("b");     waitpid(-1, NULL, 0);}   printf("c");   exit(0); } 请问可能的输入有哪些?(这是深入理解计算机系统第二版P497的一个习题) ...

有这样一段代码:

int main() 
{
  if(fork()==0){
   print("a");
  }
  else{
    printf("b");
    waitpid(-1, NULL, 0);}
  printf("c");
  exit(0);
}

请问可能的输入有哪些?(这是深入理解计算机系统第二版P497的一个习题)

答案中说有四种可能,分别是

bacc
abcc
acbc
bcac

前三种我都能够想到,但是第四种真的能够发生吗?

我认为由于父进程执行waitpid函数,且第三个参数为0,因此在子进程终止后才能继续运行,也就是说,父进程的c不可能在a之前出现。

请问我是错的还是书中答案是错的?

|
All  of  these  system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose state has changed.  A state change is considered to be: the child terminated; the child was stopped by a signal; or the child  was  resumed  by  a signal.  In the case of a terminated child, performing a wait allows the system to release the resources associated with the child; if a wait is not performed, then the terminated child remains in a "zombie" state (see NOTES below).

       If a child has already changed state, then these calls return immediately.  Otherwise they block until either a child changes state or  a  signal  handler interrupts the call (assuming that system calls are not automatically restarted using the SA_RESTART flag of sigaction(2)).  In the remainder of this page, a child whose state has changed and which has not yet been waited  upon  by  one  of  these system calls is termed waitable.

以上是 man waitpid 的输出,看起来确实可能。

    
 
 

您可能感兴趣的文章:

  • 请教,进程通讯问题,除了父子进程能进行通讯外,任意两个进程都可以吗?
  • fork() 父子进程执行顺序问题
  • 在linux,如何用共享内存来实现进程间的通讯?(这些进程没有父子关系)
  • 父子进程读写文件问题
  • 父子进程共享数据的问题
  • 使用信号量如何让父子进程交替运行?
  • 父子进程问题,高手请进!!!
  • 请教一个父子进程控制的问题
  • 父子进程共享文件描述符问题
  • 高手请进,如何完备的获得进程间父子关系,谢谢!
  • 父子进程通信:内存共享的问题
  • 父子进程通信
  • 父子进程问题
  • 如何理解父子进程修改共享量的运行结果
  • 关于fork后父子进程的关系
  • 创建父子进程,实现异步并发,这段代码对吗? iis7站长之家
  • 关于父子进程执行顺序的问题
  • 父子进程间的信号通讯问题
  • fork()的父子进程返回ID
  • apue中父子进程同步的问题。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于父子共用一个socket的问题?求教。。
  • jquery的父子兄弟节点查找示例代码
  • DevExpress实现TreeList父子节点CheckState状态同步的方法
  • 创建父子进程,实现异步并发,这段代码对吗?
  • 简直崩溃,有个家伙跟我将fork()函数父子进程共享全局变量!是么?
  • 请教个父子进程管道问题
  • 用记录锁fcntl来实现父子进程同步
  • 父子进程中数据地址的问题
  • 深入分析父子线程、进程终止顺序不同产生的结果
  • 父子进程拷文件程序的几处不懂得地方
  • 关于父子进程控制
  • 如何可以让父子进程交替输出
  • 父子进程交互输出问题。
  • 兄弟们,出手吧----》父子进程间相互通信问题
  • 管道和父子进程的问题
  • [新手求解]父子进程交替执行的问题
  • 父子进程之间管道通信问题
  • 在用管道通信父子进程遇到问题
  • 在linux下,用共享内存来实现进程间的数据交互,请问如何实现同步?(这些进程没有父子关系)
  • Linux 父子进程使用TCP连接通信connect错误


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,