1
我使用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()函數達到終止子進程和退出狀態並不父母報告孩子的過程
。
btw你想達到什麼:)? – 2014-12-19 09:39:26
我認爲你忽略了這個「如果setpgid()用於將進程 從一個進程組移動到另一個進程組(如創建管道時由某些shell執行的操作),則兩個進程組必須是同一會話的一部分(請參閱setsid(2)和憑據(7))。「 – 2014-12-19 09:41:37
是的,你可能必須調用'setsid' – Zaffy 2014-12-19 09:43:17