繁体   English   中英

为什么子进程终止? 请解释一下我吗?

[英]Why the child process terminated ?? please explain me?

我使用tcsetpgrp()函数,我在gcc编译器中运行此代码。 我想将STDOUT_FILENO更改为由子进程创建的新组。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main (void)
{
  printf("Parent pgid=%d\n", getpgrp());
  printf("STDOUT(parent)=%d\n", tcgetpgrp(STDOUT_FILENO));
  pid_t pid;
  if(0 == (pid = fork()))
    {
      setpgid(0, 0);     
      printf("child pgid=%d\n", getpgrp());
      if(0 != tcsetpgrp(STDOUT_FILENO, 0))
        perror("Error");
      printf("After changing %d\n", tcgetpgrp(STDOUT_FILENO));
      exit(0);
    }
  wait(0);
  return 0;
}

在该子进程中,当tcsetpgrp()函数到达终止的子进程,并且退出状态不会报告给父进程时。

当子进程调用tcsetpgrp ,它将收到SIGTTOU信号,这将使其停止。 随着子进程停止,父进程阻塞了调用wait ,等待子进程终止。

简单的解决方案是在调用fork之后,忽略子级中的SIGTTOU信号:

signal(SIGTTOU, SIG_IGN)

您的代码还有另一个问题-您尝试将终端的进程组更改为0,这没有任何意义。 您可能想说:

tcsetpgrp(STDOUT_FILENO, getpgrp())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM