server端与client都有两个进程:   父进程负责从socket中读取数据将其写至终端,由于父进程使用的是read系统调用的阻塞版本,因此如果socket中没有数据的话,父进程会一直阻塞;如果read返回0,表示对端连接关闭,则父进程会发送SIGUSR1信号给子进程,通知其退出;   子进程负责从键盘读取数据将其写入socket,如果键盘没有数据的话,则fgets调用会一直阻塞;