2008年5月27日 星期二

Father process is killed by a signal after calling system()

大家都知道system()是在程式裡面執行shell命令的函式,它裡面會使用fork去創造一個shell行程,並且用shell行程去執行shell命令。但是man裡面並沒有提到他會發出一個signal 17,有些版本的Linux系統收到此signal後,會執行Term的動作,此網頁有詳細介紹:http://linux.about.com/od/commands/l/blcmdl7_signal.htm

為了避免system()會因為它裡面所開的子行程要結束,而送出signal 17,必須要在安裝一個signal的時候所使用的sigaction函式,加上SA_NOCLDSTOP的flag。才不會讓父行程收到signal 17,這樣才不會無緣無故的呼叫system後父行程因為system()而死掉。

這邊提醒一下,不是只有這個signal要擷取。而是所有的signal都需要擷取下來,然後做妥善的處理。

沒有留言: