linux守护进程

守护进程

房东的猫 提交于 2020-03-17 19:46:14
守护进程: 也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件. 它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。 创建守护进程流程 1. 创建子进程,父进程退出 2. 在子进程中创建新会话 3. 改变当前目录为根目录 4. 重设文件权限掩码 5. 关闭打开的文件描述符 6. 守护进程退出处理 1 #include <sys/param.h> 2 #include <unistd.h> 3 #include <signal.h> 4 #include <sys/types.h> 5 #include <sys/stat.h> 6 #include <stdio.h> 7 #include <stdlib.h> 8 9 void init_daemon() 10 { 11 int pid; 12 int i; 13 if(pid = fork()) exit(0); //父进程,退出 14 else if(pid < 0) exit(1); //fork失败 15 16 /* 子进程继续执行 */ 17 setsid(); //创建新的会话组,子进程成为组长,并与控制终端分离 18 19 /

linux shell实现守护进程 看门狗 脚本

别来无恙 提交于 2020-03-17 19:44:25
嵌入式初学者,第一次上传代码。昨天做了一个udhcpd与udhcpc的守护,目前只会用shell模仿编写,还有什么方法可以做守护呢? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #! /bin/sh #进程名字可修改 PRO_NAME=udhcpc WLAN=ra0 while true ; do # 用ps获取$PRO_NAME进程数量 NUM=` ps aux | grep ${PRO_NAME} | grep - v grep | wc -l` # echo $NUM # 少于1,重启进程 if [ "${NUM}" -lt "1" ]; then echo "${PRO_NAME} was killed" ${PRO_NAME} -i ${WLAN} # 大于1,杀掉所有进程,重启 elif [ "${NUM}" -gt "1" ]; then echo "more than 1 ${PRO_NAME},killall ${PRO_NAME}" killall -9 $PRO_NAME ${PRO_NAME} -i ${WLAN} fi # kill僵尸进程 NUM_STAT=` ps aux | grep ${PRO_NAME} | grep T |

Linux守护进程

别来无恙 提交于 2020-03-16 14:11:43
首先说一下后台进程与守护进程的区别 最大的区别有以下几点: (a)守护进程已经完全脱离终端控制台了,而后台程序并未完全脱离终端(在终端未关闭前还是会往终端输出结果); (b)守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要在以nohup command & 格式运行才能避免影响; (c)守护进程的会话组和当前目录,文件描述符都是独立的。后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变; 守护进程的特点 守护进程(Daemon)是在后台运行的一种特殊进程,它脱离于终端,从而这可避免进程被任何终端所产生的信号打断,它在执行进程中的产生信息也不在任何终端上显示。守护进程周期性地执行某种任务或等待处理某些发生的事件,Linux的大多数服务器就是用守护进程实现的。 守护进程编程要点 1.屏蔽一些有关控制终端操作的信号,是为了防止在守护进程没有正常启动起来前,控制终端受到干扰退出或挂起。代码如下: /* 处理可能的终端信号 */ signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGHUP , SIG_IGN); 2.在后台运行。 /* 是父进程,结束父进程,子进程继续 */ if(fork()) exit(0); 3

linux下编写简单的守护进程

↘锁芯ラ 提交于 2020-03-08 14:14:28
搭建linux服务器的时候,需要写一个简单的守护进程来监控服务的运行情况,shell脚本如下: #!/bin/sh function daemon() { while true do server=`lsof -i:8080` #服务器占用端口为8080,通过查看8080端口是否占用来判断服务是否启动 date=`date "+%Y-%m-%d %H:%M:%S"` if [ ! "$server" ] then echo "$date, webserver is stoped!" nohup sh startserver.sh >> nohup.out 2>&1 & #通过nohup命令后台运行服务 echo "$date, webserver is starting..." sleep 10 #启动后等待10s else echo "$date, webserver is running..." fi sleep 10 done } daemon 存为monitor.sh,通过nohup ./monitor.sh >> monitor.log 2>&1 & 来启动。 来源: https://www.cnblogs.com/zoro-robin/p/6558231.html

守护进程的编写

柔情痞子 提交于 2020-03-08 14:14:05
目录 守护进程的编写 一,普通进程 二,守护进程 守护进程的编写 ps: 参考资料: linux C++通讯架构实战 卷1 一,普通进程 查看进程 ps -eo pid,ppid,sid,tty,pgrp,comm,stat,cmd | grep -E 'bash|PID|nginx' 这种进程都有各自对应的终端,终端退出,该进程也就退出,它的父进程是一个bash 终端被占用,你输入命令没有作用 如果放到后台(bg), 输入命令有用了,但是终端关闭进程仍然会退出 二,守护进程 定义:一种长期在后台运行的进程,不与任何终端关联 Linux本身是有很多守护进程默默运行着。查看 ps -efj 。 ppid = 0 内核进程,跟随系统,生命周期贯穿这个系统。 cmd 带 [ ] 的是内核守护进程 老祖init,也是系统守护进程,它负责启动各运行层次特定的系统服务;所以很多进程的PPID是init。而且这个init也负责收养孤儿进程; cmd列中名字不带[]的普通守护进程(用户级守护进程) 共同特点 大多数守护进程都是以超级 用户特权运行的; 守护进程没有控制终端,TT这列显示? 内核守护进程以无控制终端方式启动 普通守护进程可能是守护进程调用了setsid的结果(无控制端); 编写规则 调用umask(0); umask是个函数,用来限制(屏蔽)一些文件权限的。 fork()一个子进程

守护进程

我只是一个虾纸丫 提交于 2020-03-08 12:48:27
一、守护进程的概念: 守护进程就是通常说的daemon进程,是linux后台执行的一种进程,他的特点就是,生存周期长,独立于控制终端并且周期性的执行某种任务,不会随着终端的关闭而停止运行,直到接收到停止信息才会结束运行。 二、守护进程的创建: 创建子进程,父进程退出。 if (fork()) { exit(0); } 先解释这个语句的意思: /* * fork()函数: * 三种返回值: * 0:子进程中返回0 * > 0:在父进程中返回子进程ID * -1 : 出错返回-1 * 所以通过判断是不是0,就能判断是不是子进程,不是子进程的全部退出。 * */ 为什么做这一步? 由于守护进程是脱离终端而存在的,所以先给终端一种假死的状态,之后的工作都在子进程中进行。 父进程退出后,子进程没有父进程变成了一个孤儿进程,Linux中,每当系统发现一个孤儿进程,就会自动由1号进程(也就是init进程:内核启动的一号进程)收养它,这样子进程就变成了init进程的子进程。   2.在子进程中创建新会话: setsid()   这个步骤是创建守护进程最重要的一步,虽然实现非常简单,但意义却非常重大。在这里使用的是系统函数setsid(),在具体介绍setsid()之前,读者首先要了解两个概念:进程组和会话期。   进程组。进程组是一个或多个进程的集合。进程组由进程组ID来唯一标识。除了进程号

Xinetd服务的安装与配置详解

家住魔仙堡 提交于 2020-03-05 07:54:29
1 .什么是 xinetd xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。 2. xinetd 的特色 1 ) 强大的存取控制功能 — 内置对恶意用户和善意用户的差别待遇设定。 — 使用libwrap支持,其效能更甚于tcpd。 — 可以限制连接的等级,基于主机的连接数和基于服务的连接数。 — 设置特定的连接时间。 — 将某个服务设置到特定的主机以提供服务。 2 ) 有效防止 DoS 攻击 — 可以限制连接的等级。 — 可以限制一个主机的最大连接数,从而防止某个主机独占某个服务。 — 可以限制日志文件的大小,防止磁盘空间被填满。 3 ) 强大的日志功能 — 可以为每一个服务就syslog设定日志等级。 — 如果不使用syslog,也可以为每个服务建立日志文件。 — 可以记录请求的起止时间以决定对方的访问时间。 — 可以记录试图非法访问的请求。 4 ) 转向功能 可以将客户端的请求转发到另一台主机去处理。 5) 支持 IPv6 xinetd自xinetd 2.1.8.8pre*起的版本就支持IPv6,可以通过在./configure脚本中使用with-inet6

Linux 守护进程

百般思念 提交于 2020-03-05 05:20:47
1. 守护进程: 守护进程也成精灵进程,是生成期较长的一种进程。他们常常在系统自举时启动,仅在系统关闭时才终止。因为他们没有控制终端,所以他们在后头运行。 2. ps查看守护进程的特征: 大多数守护进程以超级用户(用户ID=0)特权运行,守护进程均没有控制终端,其终端名设置为?,终端前台进程组ID设置为-1;内核守护进程以无终端的方式启动。用户层守护进程缺少控制终端可能是守护进程调用了setsid的结果。所有用户层紧都是进程组的组长进程以及会话的首进程,而且是这些进程组和会话中的唯一进程。最后,应当引起注意的是大多数守护进程的父进程都是init进程; 3. 函数原型: #include <unistd.h> int daemon(int nochdir, int noclose); ret=成功返回0,失败返回-1 nochdir- =0,切换工作目录到 / noclose- =0,标准输入输出错误输出重定向到/dev/null 4. 常用编程模型: 1 #include <unistd.h> 2 #include <stdio.h> 3 4 int do_sth() 5 { 6 //Add what u want 7 return 0; 8 } 9 int main() 10 { 11 daemon(0,0); 12 while ( 1 ) 13 { 14 do_sth();

守护进程

六眼飞鱼酱① 提交于 2020-03-05 00:02:16
一、守护进程的概念: 守护进程就是通常说的daemon进程,是linux后台执行的一种进程,他的特点就是,生存周期长,独立于控制终端并且周期性的执行某种任务,不会随着终端的关闭而停止运行,直到接收到停止信息才会结束运行。 二、守护进程的创建: 1 创建子进程,父进程退出。 为什么做这一步? 由于守护进程是脱离终端而存在的,所以先给终端一种假死的状态,之后的工作都在子进程中进行。 父进程退出后,子进程没有父进程变成了一个孤儿进程,Linux中,每当系统发现一个孤儿进程,就会自动由1号进程(也就是init进程:内核启动的一号进程)收养它,这样子进程就变成了init进程的子进程。 2.在子进程中创建新会话: setsid() 这个步骤是创建守护进程最重要的一步,虽然实现非常简单,但意义却非常重大。在这里使用的是系统函数setsid(),在具体介绍setsid()之前,读者首先要了解两个概念:进程组和会话期。 进程组。进程组是一个或多个进程的集合。进程组由进程组ID来唯一标识。除了进程号(PID)之外,进程组ID也是一个进程的必备属性。 每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID,且该进程ID不会因组长进程的退出而受到影响。 会话期。会话组是一个或多个进程组的集合。通常,一个会话开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。

Python与Hack之守护进程

一个人想着一个人 提交于 2020-03-03 10:09:42
1.什么是守护进程: 在 linux 或者 unix 操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。 2.Lunix中守护进程列表: amd:自动安装NFS( 网络文件系统 )守侯进程 apmd:高级电源治理 Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库 Autofs:自动安装治理进程automount,与NFS相关,依靠于NIS Bootparamd:引导参数服务器,为LAN上的 无盘工作站 提供引导所需的相关信息 crond:linux下的计划任务 Dhcpd:启动一个DHCP(动态IP地址分配)服务器 Gated: 网关 路由守候进程,使用动态的OSPF 路由选择协议 Httpd:WEB服务器 Inetd:支持多种 网络服务 的核心守候程序