Linux守护程序
一、守护进程概述
守护进程,也称为守护进程,是Linux中的后台服务进程。它是一个长期的过程,通常独立于控制终端,定期执行某些任务或等待处理某些事件。守护程序通常在系统启动时开始运行,在系统关闭时终止。
Linux系统中守护进程很多,大部分服务都是由守护进程实现的。例如,常见的守护程序包括syslogd、web服务器httpd、邮件服务器sendmail和数据库服务器mysqld。
二、流程和终端
在Linux中,每个系统和用户之间的接口称为终端。从这个终端运行的进程被附加到这个终端,这个终端被称为这些进程的控制终端。当控制终端关闭时,相应的进程将自动关闭。
守护进程可以突破这个限制。它从头运行到整个系统关闭。如果你想让一个进程不受用户或终端变化的影响,你必须把这个进程变成一个守护进程。
第三,检查守护进程
命令:ps axj
父进程id: ppid
流程id: PID
进程组id: pgid
会话id: sid
终端id: tty
终端进程组标识:TPG标识
状态:STAT
用户:UID
运行时间:时间
命令:命令
四、Linux守护进程编写
1.创建子进程,父进程退出
第一步完成后,子过程正式与控制终端分离
由于父进程先于子进程退出,子进程成为孤立进程
PID = fork;
if /*父进程退出*/
{
退出;
}
由于守护进程与控制终端是分离的,所以在第一步完成后,会在shell终端中产生一个程序已经运行的假象。所有后续工作都在子流程中完成,用户可以在shell终端执行其他命令,从而正式脱离控制终端
因为父进程在子进程之前已经退出,所以子进程没有父进程,从而成为孤儿进程。在Linux中,每当系统发现一个孤儿进程,就会被1号进程自动采用。原始子流程成为初始化流程的子流程。
2.在子进程中创建新会话
Setsid函数
Setsid函数用于创建新的会话,并使当前进程成为新会话组的领导者。setsid函数可以使进程完全独立,从而脱离所有其他进程的控制。
流程属于一个流程组,流程组号是流程负责人的流程号。一个登录会话可以包含多个进程组。这些过程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。控制终端、登录会话和进程组通常继承自父进程。我们的目标是摆脱它们,让它们不受影响。方法是在点1的基础上调用setsid,使流程成为会话领导。
流程组
一个或多个进程的集合。流程组由流程组标识唯一标识。每个流程组都有一个领导流程,流程组标识是领导流程的流程号。
会话周期
对话组是一个或多个进程组的集合
流程组的会话终端
3.修改当前工作目录
chdir;
通常的做法是使用“/”或“/tmp”作为守护进程的当前工作目录。
在运行过程中,无法卸载当前目录所在的文件系统。
Chdir函数可以改变进程的当前工作目录
4.重置文件权限屏蔽
umask;
文件权限屏蔽指的是在文件权限中屏蔽掉的相应位。将文件权限屏蔽设置为0可以增加守护程序的灵活性。设置文件权限屏蔽的函数umask;
5.关闭文件描述符
fdtablesize = getdtablesize;
for
close;
新创建的子进程从父进程继承所有打开的文件。新会话创建后,守护进程离开了任何控制终端,未使用的文件应该关闭。这些打开的文件可能永远不会被守护程序读取或写入,但它们也会消耗系统资源,并可能导致它们所在的文件系统被卸载
终端输入的字符无法到达守护进程,守护进程通过常规方法输出的字符无法在终端显示。因此,文件描述符为0、1、2的三个文件已经失去意义,应该关闭。
动词 (verb的缩写)应用代码示例
创建一个守护进程,每1秒将系统时间写入daemon.txt文件。
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main
{
pid _ t pid
int num,I;
int fd
time _ t t
char buf退出;;
PID = fork;
//第一步:创建子进程,结束父进程;
if
{
//第二步:新建会话,脱离原流程、控制终端、原流程组;
setsid;
//第三步:修改当前目录。每个进程都有一个当前目录。
chdir;
//第4步:重置文件权限屏蔽
umask;
//第五步:关闭打开的文件描述符
num = getdtablesize;//获取当前打开的文件描述符表
for
{
关闭;
}
fd = open;
while
{
t =时间;
sprintf," time: %sn ",ctime);
write);
睡眠;
}
}
else if
{
}
返回0;
}
1.《守护进程 学习Linux守护进程详细笔记,让你快速学习》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《守护进程 学习Linux守护进程详细笔记,让你快速学习》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1684523.html