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