如何以守护进程在linux系统下执行

如题所述

编写守护进程程序的要点:
(1)让程序在后台执行。方法是调用fork()产生一个子进程,然后使父进程退出。
(2)调用setsid()创建一个新对话期。控制终端、登录会话和进程组通常是从父进程继承下来的,守护进程要摆脱它们,不受它们的影响,方法是调用setsid()使进程成为一个会话组长。setsid()调用成功后,进程成为新的会话组长和进程组长,并与原来的登录会话、进程组和控制终端脱离。
(3)禁止进程重新打开控制终端。经过以上步骤,进程已经成为一个无终端的会话组长,但是它可以重新申请打开一个终端。为了避免这种情况发生,可以通过使进程不再是会话组长来实现。再一次通过fork()创建新的子进程,使调用fork的进程退出。
(4)关闭不再需要的文件描述符。子进程从父进程继承打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。首先获得最高文件描述符值,然后用一个循环程序,关闭0到最高文件描述符值的所有文件描述符。
(5)将当前目录更改为根目录。
(6)子进程从父进程继承的文件创建屏蔽字可能会拒绝某些许可权。为防止这一点,使用unmask(0)将屏蔽字清零。
(7)处理SIGCHLD信号。对于服务器进程,在请求到来时往往生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie),从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将SIGCHLD信号的操作设为SIG_IGN。这样,子进程结束时不会产生僵尸进程。
温馨提示:内容为网友见解,仅供参考
无其他回答

如何以守护进程在linux系统下执行
(1)让程序在后台执行。方法是调用fork()产生一个子进程,然后使父进程退出。(2)调用setsid()创建一个新对话期。控制终端、登录会话和进程组通常是从父进程继承下来的,守护进程要摆脱它们,不受它们的影响,方法是调用setsid()使进程成为一个会话组长。setsid()调用成功后,进程成为新的会话组...

linux守护进程是如何实现的?
开机自启动功能,让守护进程在系统启动时自动运行,这可以通过相应的配置文件实现,无需过多解释。然而,当守护进程意外死掉时,如何确保其能自动恢复运行?引入Systemd管理服务是一个可行的方案。通过在`service`文件中添加特定配置,可以告诉Systemd如何启动、停止以及监控特定服务的状态。详细说明可以查阅`syst...

linux系统守护进程如何启动?
第一步是 BIOS 完整性检查,也就是 POST (Power-On Self Test)。在这个阶段,系统会进行硬件的检查和测试,以确保所有设备都正常工作。如果硬件没有问题,系统将进入下一个阶段。接下来,引导加载程序(GRUB2)将接管并执行第二步。GRUB2 是一种引导加载程序,负责加载内核和初始化系统环境。它通常会...

详解Linux中的守护进程
调用守护进程的关键步骤是使用setsid函数创建一个新的会话,并使当前进程成为会话的领导者。成功调用时,会返回当前进程的ID,失败返回-1。确保在调用前当前进程非进程组领导者是必要的,通过先fork再调用setsid实现。调用守护进程的标志包括:成功建立新的会话,当前进程成为会话的领导者;成功创建新进程组,...

什么是守护进程,创建守护进程的步骤是什么?
方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。 if(pid=fork()) exit(0);\/\/是父进程,结束父进程,子进程继续 (2)脱离控制终端,登录会话和进程组 有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录...

Python3实现守护进程
然后,通过fork和exit操作创建子进程,同时父进程终止以让shell认为命令执行完毕,并使子进程获得新的进程ID。接着,使用setsid函数创建新的会话和进程组,切断与控制终端的联系。此外,将当前工作目录更改为根目录或特定目录,以确保守护进程运行在一个挂载的文件系统中。同时,关闭不再需要的文件描述符,...

创建守护进程的步骤
为了创建一个简单的守护进程,以下是以Linux系统下从终端Shell启动为例的步骤。在创建守护进程的过程中,我们需要理解两个概念:会话和进程组。在Linux系统中,每个进程都存在PID(进程唯一标识)、PGID(进程组ID)和SID(会话ID)。PID用于标识单个进程,PGID表示进程所属的进程组,SID表示进程所属的...

Linux下udev应用
RUN就是所执行的内容,一般以脚本为主;整体的意思是,当有一个块设备添加进来,就执行\/etc\/udev\/scripts\/mount.sh这个脚本,块设备的卸载包括变更也都是执行这个脚本。接下来我们再看这个脚本的内容,如下所示:脚本内容较长,大致内容是通过判断插入块设备的文件系统类型进行不同的操作,一般将其挂载到...

Linux服务器:守护进程
大多数Linux服务器利用守护进程实现,如inetd处理网络服务请求,httpd提供Web服务。要查看守护进程,只需在终端输入`ps axj`命令。守护进程启动方式包括多个步骤:屏蔽控制终端信号、后台运行、脱离控制终端与会话、禁止重新打开控制终端、关闭文件描述符、改变工作目录、重设文件创建掩模以及处理SIGCHLD信号。编写...

守护进程在哪里启动
守护进程一般在系统启动时被启动,其启动的具体位置和方式因操作系统而异。在Linux系统中,守护进程的启动位置通常是在\/etc\/init.d目录下,而启动方式则是通过init或systemd等系统服务管理器来实现。在Windows系统中,守护进程则是通过服务来启动,可以通过控制面板或命令行来进行管理。无论在哪个操作系统中...

相似回答