Linux守护进程

来源:互联网 发布:百度云资源搜索cms 编辑:程序博客网 时间:2024/05/18 00:30
Linux下守护进程:
建立守护进程:
#include
#include
#include
#include
#include
#include

void daemonInit()
{
int pid;
int i;
if(pid = fork())
exit(0);//结束父进程
else if(pid < 0)
exit(1);
setsid();//是子进程成为一个新会话的组长和进程组长,并与控制台分离;
if(pid = fork())
exit(0);//建立第二个子进程,终止第一个子进程,因为第一个子进程成为进程组长后,

在运行时会再次申请打开一个控制终端,所以建立第二个子进程,终止第一个子进程,可以使第二个子进程

游离,因为第二个子进程不是会话组组长,所以不会申请打开控制终端;
else if(pid < 0)
exit(1);
for(i = 0;i

的文件描述符,如果不关闭会浪费系统资源,也不会导致进程所在的文件系统无法卸下;
{
close(i);
}
chdir("/");//因为进程运行的文件目录不能够被卸下,建立的这些进程默认在父进程所在的文件目

录中,所以最好将目录更改为根目录“/”,因为根目录不会被卸下;
umask(0);//进程从创建它的父进程那里继承了文件创建掩模,它可能修改守护进程所创建的文件存

取位,为了防止这一点,将文件创建掩模清除;
signal(SIGCHLD,SIG_IGN);//这个并不是必须的,但对于某些进程,父进程不等待子进程结束而结

束会产生僵尸进程,如果等待会增加父进程负担,可以处理SIGCHLD信号使内核在子进程结束时回收子进程资

源,使其不产生僵尸进程;
return;
}

int main()
{
daemonInit();
...//函数要执行的任务,比如五分钟往特定文件中写数据,这样就可以使用守护进程对这个任务进行守护,让任务每五分钟写一次文件;
}
Linux下守护进程:
建立守护进程:
#include
#include
#include
#include
#include
#include

void daemonInit()
{
int pid;
int i;
if(pid = fork())
exit(0);//结束父进程
else if(pid < 0)
exit(1);
setsid();//是子进程成为一个新会话的组长和进程组长,并与控制台分离;
if(pid = fork())
exit(0);//建立第二个子进程,终止第一个子进程,因为第一个子进程成为进程组长后,

在运行时会再次申请打开一个控制终端,所以建立第二个子进程,终止第一个子进程,可以使第二个子进程

游离,因为第二个子进程不是会话组组长,所以不会申请打开控制终端;
else if(pid < 0)
exit(1);
for(i = 0;i

的文件描述符,如果不关闭会浪费系统资源,也不会导致进程所在的文件系统无法卸下;
{
close(i);
}
chdir("/");//因为进程运行的文件目录不能够被卸下,建立的这些进程默认在父进程所在的文件目

录中,所以最好将目录更改为根目录“/”,因为根目录不会被卸下;
umask(0);//进程从创建它的父进程那里继承了文件创建掩模,它可能修改守护进程所创建的文件存

取位,为了防止这一点,将文件创建掩模清除;
signal(SIGCHLD,SIG_IGN);//这个并不是必须的,但对于某些进程,父进程不等待子进程结束而结

束会产生僵尸进程,如果等待会增加父进程负担,可以处理SIGCHLD信号使内核在子进程结束时回收子进程资

源,使其不产生僵尸进程;
return;
}

int main()
{
daemonInit();
...//函数要执行的任务,比如五分钟往特定文件中写数据,这样就可以使用守护进程对这个任务进行守护,让任务每五分钟写一次文件;
}
原创粉丝点击