Linux守护进程

xiaoxiao2021-02-28  154

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(); ...//函数要执行的任务,比如五分钟往特定文件中写数据,这样就可以使用守护进程对这个任务进行守护,让任务每五分钟写一次文件; }
转载请注明原文地址: https://www.6miu.com/read-25904.html

最新回复(0)