具有代表性的并发服务器端实现模型:
多进程服务器:通过创建多个进程提供服务;
多路复用服务器:通过捆绑并统一管理I/O对象提供服务;
多线程服务器:通过生成与客户端等量的线程提供服务。
1、进程
fork() 函数
#include <unistd.h>
pid_t fork();
功能:
创建一个进程。
返回值:
失败,返回-1; 成功,返回进程ID;
父进程: fork() 函数返回子进程ID;
子进程: fork() 函数返回0。
2、僵尸进程
子进程运行完后,父进程并未对其回收。
验证僵尸进程:
// 在 fork() 后程序会先运行子进程然后父进程。
// 在本程序中,父进程 sleep(30); 在这个过程中子进程未被回收,而成为了僵尸进程。
// 在 这30s 过程中,打开一个新的终端 ps aux 在 sta栏内会看到一个进程的状态为 Z+, 就是此僵尸进程。
(代码: unit_10_zombie.c)
30s后: