0
我正在寫一個shell。它分叉背景和前景過程。我遇到了SIGTSTP信號問題。因此,在給出Ctrl^Z之後,由於該信號被傳遞到我的shell及其子進程(我的shell已分叉的所有後臺進程和前臺進程),因此會生成SIGTSTP。但是就像在實際的shell中一樣,SIGTSTP僅被傳遞到前臺進程,而不是後臺進程。那麼如何控制這種行爲意味着阻止信號發送到我的外殼的後臺進程?如何控制SIGTSTP信號到子進程?
我也試過setpgid()
,這意味着改變後臺進程的pgid。但是一旦進程執行完成,setpgid()
將返回錯誤。
我也需要exec之後。我可以通過fg內建函數爲foregorund帶來一個後臺進程。我已經在做信號處理器 – avd 2009-10-04 03:26:02
你做錯了。就像我在最後一段所說的那樣,給每個工作一個不同的'pgid'。當你想把工作帶到前臺時,使用'tcsetpgrp'來給這個終端的組控制。當你想把作業放到後臺時,使用'tcsetpgrp'命令給你的shell的組端控制。 – ephemient 2009-10-04 23:58:58