shared memory這手法已經是常見的IPC手法,但是在開發期間往往程式會在無預期的地方出錯,或者是手動ctrl+c給予中斷,這時候必須加入signal process讓程式自行清理,或者類似socket的地方,不然會有port number或者shared memory繼續被占據,下次執行前必須手動清理
常見的signal有
SIGINT : 由ctrl+c產生
SIGTERM : 關機或者由其他方式送入
最後在IPC產生的時候,由child process可以要求系統對於parent process結束的時候送出一個signal給child process
prctl(PR_SET_PDEATHSIG, SIGHUP);
這個只適用於linux,屬於kernel額外提供的功能
但是一旦需要再signal process中回收資源的後,表示資源必須是global variable,因為我暫時想不到其他方式,這某種程度讓程式變得比較不穩定,當然可以想辦法寫入shared memory中,但是這樣一來就面臨shared memory規劃的問題(要小心不要輸入的資料蓋錯地方),還有race condition的議題
愈是深入IPC就愈覺得System Programming因作業系統而異的特色
參考資料:
http://www.win.tue.nl/~aeb/linux/lk/lk-5.html
http://www.cs.cf.ac.uk/Dave/C/node24.html
http://www.c.happycodings.com/Gnu-Linux/code18.html
http://hylcarson.blog.sohu.com/54735006.html
沒有留言:
張貼留言