作者: fergus (zfengzhen@gmail.com)
服务器后台进程启动和退出常用的一种方式
./gamesvr xxx xxx xxx start
./gamesvr stop
- 通过getopt_long解析参数, 存入相应字段
- 检查pid文件是否存在, 如果存在, 则退出
- daemon化
- 设置自定义信号捕获处理(比如处理stop命令)
- 初始化程序
- 判断pid文件是否存在
- 发送自定义stop命令, kill(proc_id, signal)
- 退出
- 发送自定义stop命令后, 正在运行的程序主要工作是将主循环的标记位设为停止状态, 让程序继续跑完已经正在运行的事件, signal最好使用SIGRTMAX-1自定义信号, 如果使用SIGINT可能会对其他第三方库有影响, 导致在程序运行时出现异常
- stop命令进程中, 注意不要调用到一些start进程才会初始化的东西, 比如命令行解析后的文件, 以及日志系统的一些调用, 因为stop命令一般不会启动这些, 如果调用会导致异常