【网络】守护进程
一、前后台进程介绍(linux进程间的关系)
1、前台进程
什么叫做前台?什么叫做后台?
不论前台还是后台都能向显示器打印,谁拥有键盘文件,谁就是前台!键盘只有一个所以就只有一个前台。
2、后台进程(fg,bg,jobs使用)
3、任务和进程组的关系
属于同一个会话(用谁的xshell去访问使用)任务是前后台都有的任务,琴台任务只有一个,后台任务有多个,任务分发给进程组,进程组可以自称一组也可以几个进程一起合并成为一组。
(1)登录
我张三登录以后,系统会以bash这个任务的ID为命名构建一个会话,这些进程组和任务都会放在一个会话中!
(2)退出
我们不想受到任何用户的登录和注销的影响的话就要守护进程化。
注销:把会话全部删掉,所以守护进程怎么做?
二、守护进程
步骤:忽略异常信号->将自己设置为独立session->更改文件的目录->将标准输入标准输出标准错误重定向到/dev/null这个垃圾桶文件中。
#pragma once
#include <fcntl.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <string>
const std::string nullfile = "/dev/null";
void _Daemon(const std::string& cwd = “”)
{
// 1.忽略其他信号
signal(SIGCLD, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGSTOP, SIG_IGN);
// 2.将自己设置为独立会话
if (fork() > 0) exit(0); // 父进程直接退出
setsid();
// 3.更改文件的目录
if (!cwd.empty()) chdir(cwd.c_str());
// 4.将标准输入标准输出标准错误重定向到/dev/null这个垃圾桶文件中
int fd = open(nullfile.c_str(), O_RDWR);
if (fd > 0)
{
// 重定向
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
close(fd);
}
}
原文地址:https://blog.csdn.net/m0_70088010/article/details/140626832
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!