在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Linux  網(wǎng)絡安全/ linux下C/S點對點通信

linux下C/S點對點通信

我實現(xiàn)了一個簡單的C/S點對點通信(linux下),現(xiàn)在有一個問題,當客戶端按下ctrl+c退出時,此時服務端會發(fā)送一個信號給讀取數(shù)據(jù)的進程,告訴它客戶端已經(jīng)退出了,你也可以退出了,但是這個進程一直沒退出,想了很久,覺得很奇葩,不知道為什么。

代碼server.cpp和client.cpp分別在:

server.cpp https://paste.ubuntu.com/p/qV...

client.cpp https://paste.ubuntu.com/p/4K...

回答
編輯回答
莓森

killpg() 參數(shù)錯誤,改成如下便可

// server.cpp, line 144
// killpg(pid, SIGUSR1);
killpg(getpgid(getpid()), SIGUSR1);

由于父進程同屬一個進程組,且 SIGUSR1 默認“結束進程”,因此 killpg() 后面的代碼將沒有機會執(zhí)行。

2017年11月11日 04:00
編輯回答
任她鬧

killpg 是向一個進程組發(fā)送信號,第一個參數(shù)是進程組 ID。

如果你只想要給子進程發(fā)送信號,可以使用 kill

2017年5月1日 07:29