怎样写守护进程?

来源:互联网 发布:淘宝客api推广 编辑:程序博客网 时间:2024/09/21 09:00

1、脱离控制终端tty,让父进程为init();

先处于游离状态,用init()控制,脱离方式:用fork()建立进程,把父进程关闭。

2、禁止进程重新打开控制终端

3、关闭打开的文件描述符。

文件描述符的大小在: cd /proc/sys/fs中,cat file-max得到最大文件描述符。然后for循环关闭。

4、改变当前的工作目录

进程活动时,其工作目录所在的文件系统不能卸下。一般需将工作目录更改为根目录chdir();

5、重设文件创建的掩码

umask(0000);

下面用代码来描述以上5步。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i;
int fd;
char *ptr="hello world";
//1.creat a child process
pid_t pid=fork();

//2.exit parent
if(pid<0)
exit(1);
else if(pid>0)
exit(0);
//set new session
setsid();
//3.close all fd
for(i=0;i<49265;i++)
{
close(i);
}
//4.chage dir 
chdir("/");
//5.umask
umask(0);
while(1)
{
fd=open("/tmp/jia.log",O_CREAT|O_RDWR|O_APPEND,0666);
if(fd>0)
{
write(fd,ptr,strlen(ptr));
close(fd);
}
sleep(3);
}
return 0;
}

当执行可执行文件后,进程一直存在。但是系统关闭后,进程才消亡。

想要守护进程一直运行,可将可执行程序的路径添加到/etc/init.d下的rc文件中。


0 0
原创粉丝点击