![](/img/trans.png)
[英]Getting process id via EnumWindows… Can someone please explain me why this code is working?
[英]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.