区别于浏览器等展示性程序,运行于Linux系统上的网络服务器进程不需要前台展示,只需后台运行。此类进程即为Daemon进程(又叫精灵进程)。如Mysqld,Apached等。
Daemon进程实际为父进程fork()出来的子进程。但是会断开与控制终端的联系。
方法一:使用C系统函数daemon。
系统函数daemon可以使进程脱离控制终端,在系统后台以系统daemon的方式运行。
#include <unistd.h>
int daemon(int nochdir, int noclose);
//nochdir:如果该参数值为0,则讲进程的当前路径修改为跟路径“/”。否则不变。
//noclose:如果该参数值为0,则重定向标准输入,标准输出,标准出错到系统空洞设备/dev/null(此时,进程不会向文件描述符1和2输出信息,也不会从0接收输入)。否则不做改变。
直接调用daemon函数,是最简单的写出后台进程的方法。
方法二:自己实现daemon函数。
int daemon_my(int nochdir, int noclose)
{
//Clear file creation mask
umask(0);
//Get maximum number of file descriptors.
struct rlimit rl;
if(getrlimit(RLIMIT_NOFILE, &rl) < 0)
return -1;
pid_t pid;
if((pid&#