守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。
守护进程是一个在后台运行并且不受任何终端控制的进程。这也是守护进程最重要的特点。在Linux下创建守护进程的步骤如下。
下面是在Linux系统下创建守护进程的一个简单示例。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define MAXFILE 65535
int main()
{
int i,fd;
pid_t pid;
char *buf = "create a dameon\n";
int len = strlen(buf);
//创建子进程,终止父进程
pid = fork();
if(pid < 0)
{
perror("创建子进程失败");
exit(-1);
}
else if(pid > 0)
{
exit(0);
}
//建立新会话
setsid();
//更改工作目录
chdir("/");
//修改文件掩码
umask(0);
//关闭文件
for(i=0;i<MAXFILE;i++)
{
close(i);
}
while(1) //在后台一直运行
{
fd = open("/mnt/hgfs/共享文件夹/Linux环境编程/dameon.log",O_CREAT|O_WRONLY|O_APPEND,0664);
if(fd < 0)
{
perror("open failed");
exit(-1);
}
write(fd,buf,len);
close(fd);
}
return 0;
}
执行以后,我们可以通过ps aux命令在终端看到daemon进程成为了一个守护进程。他的TTY标志是问号(?)。结果如下:
当我们不需要的守护进程的在后台继续执行的时候,可以通过kill -9 pid来杀死它。我们可以查看daemon.log文件的内容如下: