我正試圖給子進程(通過fork()
)前臺訪問終端。如何讓tcsetpgrp()在C中工作?
我fork()
後,我跑在子進程以下代碼:
setpgid(0, 0);
和:
setpgid(child, child);
在父進程。
這給孩子自己的過程組。撥打setpgid()
的呼叫工作正常。
現在我想讓孩子進入終端。
我加入了setpgid()
調用後以下孩子:
if (!tcsetpgrp(STDIN_FILENO, getpid())) {
perror("tcsetpgrp failed");
}
之後,有一個execv()
命令產卵/usr/bin/nano
。
然而,沒有nano
出現,沒有任何反應,並且終端看起來好像在等待用戶輸入。
此外,在tcsetpgrp()
調用後似乎沒有代碼執行。
我讀了一個地方,我需要發送一個SIGCONT
信號到子進程來讓它工作。如果過程停止了,我該怎麼做?父母是否必須發送信號?
如果這是解決方案,我該如何去發送SIGCONT
信號?
raise(SIGCONT);
此外,我不知道這會有所幫助,但該代碼工作正常,併產生nano
如果我跑我的程序有:
exec ./program
相反的:
./program
有任何想法嗎?非常感謝!
會議領導(讀:殼)應該調用tcsetpgrp() – blaze 2011-03-17 16:59:09