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

关于wait函数

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

    本文导语:  为什么第一个子进程exit了,父进程仍然挂起呢? #include  #include  #include  #include  #include  int main() { pid_t pid; char *message; int n; int exit_code; printf("fork program startingn"); pid = fork(); switch(pid) { case -1: perror("f...

为什么第一个子进程exit了,父进程仍然挂起呢?

#include 
#include 
#include 
#include 
#include 

int main()
{
pid_t pid;
char *message;
int n;
int exit_code;

printf("fork program startingn");
pid = fork();
switch(pid)
{
case -1:
perror("fork failed");
exit(1);
case 0:// first child 
message = "child";
n = 1;
exit_code = 37;
pid = fork();// second child
if(pid == 0){
message = "grandson";
n = 8;
exit_code = 38;
}
break;
default:
message = "parent";
n = 3;
exit_code = 0;
break;
}
for(; n>0; n--) {
puts(message);
sleep(1);
}

if(pid != 0){
int stat_val;
pid_t child_pid;

child_pid = wait(&stat_val);

printf("child has finished: PID = %dn", child_pid);
if(WIFEXITED(stat_val))
printf("child exited with code %dn", WEXITSTATUS(stat_val));
else
printf("child terminated abnormallyn");
}

exit(exit_code);
}


|
你说的第一个子进程是哪个?

程序应该改是这样运行:
parent:fork(child), sleep(3), wait(child).
child : fork(grandson), sleep(1), wait(grandson).
grandson: sleep(8).

应为3个进程都有sleep,无需考虑竞争条件。
1.child进程首先进入wait(grandson) 挂起。
2.parent进程进入wait(child)挂起。
3.grandson进程执行完, 唤醒child进程,
4.child进程唤醒后执行完,唤醒parent进程。
5.parent进程执行完,程序退出。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.awt类frame的类成员方法: wait_cursor定义及介绍
  • DEFINE_WAIT(__wait)这宏把__wait变量定义在了进程的内核堆栈中,则另一进程使用wake_up时,是如何访问到__wait变量的呢?
  • java命名空间java.awt类cursor的类成员方法: wait_cursor定义及介绍
  • wait_for_completion wait_event 区别
  • java命名空间java.lang枚举thread.state的类成员方法: waiting定义及介绍
  • sleep(5)与wait(5)还有下面这个strruct timeval wait_time有什么不同。
  • java命名空间java.lang枚举thread.state的类成员方法: timed_waiting定义及介绍
  • java 中的wait()怎么用呢
  • java命名空间java.lang类object的类成员方法: wait定义及介绍
  • waiting(0);什么意思?
  • wait()操作
  • shell中的wait是什么意思?
  • 编译模块时出的问题 storage size of 'wait' isn`t know
  • 关于prepare_to_wait的参数
  • wait()?
  • FIN_WAIT_2
  • netstat发现TIME_WAIT
  • netstat查看有很多TIME_WAIT状态的ip,怎么回事?
  • 父进程的死循环里的wait为何会让子进程僵尸进程
  • wait()? iis7站长之家
  • 为什么需要 TIME_WAIT 状态?


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3