Linux守护进程
守护进程简介
守护进程是一个在后台运行且不受任何终端控制的进程。用户使守护进程独立于所有终端是因为,同一个终端可能会被其他的用户使用。而用户不希望在使用终端的过程中受到上一个用户进程的任何信息。同样,由终端输入的任何信号也不应该影响先前在该终端启动的任何守护进程的运行。虽然让服务器后台运行只需要shell命令行后加&即可,但用户还应该做些工作,让程序本身能够自动进入后台,且不依赖于任何终端。
由于守护进程没有控制终端,因此当某些情况发生时,需要输出某些信息,此时可以通过写日志文件的方式输出。
守护进程创建
- 创建子进程,终止父进程
- 在子进程中创建新会话
- 改变工作目录
- 重设文件创建掩码
- 关闭文件描述符
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(){
pid_t pid;
int i,fd;
pid=fork();//创建子进程
if(pid<0)
{
printf("fork error\n");
exit(1);
}
else if(pid>0){
exit(0);
}
setsid();//创建新会话
chdir("/");//改变当前工作目录为根目录
umask(0);//设置文件权限掩码
for(i=0;i<getdtablesize();i++){
close(i);//关闭文件权限描述符
}
...
exit(0);
}