linux守护进程

linux - 守护进程脚本

半腔热情 提交于 2020-03-26 11:17:46
cat >daemon.sh <<EOF #!/bin/sh while true; do #启动一个循环,定时检查进程是否存在 server=\`ps aux | grep server | grep -v grep\` if [ [ ! \$server ]]; then #如果不存在就重新启动 nohup server -c 1 >> server.log & #启动后沉睡10s sleep 10 fi #每次循环沉睡10s sleep 5 done 来源: 51CTO 作者: f1yinsky 链接: https://blog.51cto.com/f1yinsky/2421878

守护进程

孤者浪人 提交于 2020-03-23 16:33:39
   守护进程常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,所以是在后台运行的,linux大部分服务器就是用守护进程实现的,守护进程的编程也不复杂,下面来说一下守护进程的特征、编程规则、出错处理等。 守护进程的特征: 1.所有守护进程都以超级用户(ID=0)的优先权运行; 2。没有一个守护进程具有控制终端—终端名称设置为问号(?)、终端前台进程组I D设置为-1。缺少控制终端可能是精灵进程调用了s e t s i d的结果。 3.除u p d a t e以外的所有精灵进程都是进程组的首进程,对话期的首进程,而且是这些进程组和对话期中的唯一进程。u p d a t e是它所在进程组和对话期(中的唯一进程,但4是该进程组的首进程(可能也是该对话期的首进程)已经终止。 4.所有这些守护进程的父进程都是i n i t进程。 守护进程的编程规则: 1.创建子进程,父进程推出,先调用fork函数,之后使父进程exit,只对下面做的setsid调用是必要的前提条件; 2.调用setsid函数创建一个新的会话,并担任组长,形式如下: setsid()函数格式: #include <sys/types.h> #include <unist.h> Pid_t setsid(void) 函数成功时返回该进程组ID, 出错时返回-1; 3.改变当前目录为根目录 chdir(“/”); 4

[转帖]浅谈Linux进程模型

折月煮酒 提交于 2020-03-23 13:29:35
浅谈Linux进程模型 https://blog.lecury.cn/2019/04/04/浅谈Linux进程模型/ 写在前面 进程基础 进程概念 进程描述符 进程创建 上下文切换 init进程 进程应用 进程间通信 信号处理 后台进程与守护进程 浅谈nginx多进程模型 常用工具介绍 ps: 查看进程属性 lsof: 查看打开的文件情况 netstat: 查看网络连接情况 strace: 查看系统调用情况 进程基础 基础概念 进程是操作系统的基本概念之一,它是操作系统分配资源的基本单位,也是程序执行过程的实体。程序是代码和数据的集合,本身是一个静态的概念,而进程是程序的一次执行的实体,是一个动态的概念。 那在Linux操作系统中,是如何描述一个进程的呢? 进程描述符 为了管理进程,内核需要对每个进程的属性和所需要做的事情,进行清楚的描述,这个就是进程描述符的作用,Linux中的进程描述符由 task_struct 标识。 task_struct 的数据结构是相当复杂的,不仅包含了很进程属性的字段,而且也包括了指向其他数据结构的指针。大致结构如下: state: 描述进程状态 thread_info: 进程的基本信息 mm: mm_struct 指向内存区描述符的指针 tty: tty_struct 终端相关的描述符 fs: fs_struct 当前目录 files: files

CentOS配置rsyslog Serve

三世轮回 提交于 2020-03-22 15:07:44
CentOS6配置rsyslog Server: vi /etc/rsyslog.conf: #启用如下tcp支持: $ModLoad imtcp $InputTCPServerRun 514 #添加如下模板: $template RemoteLogs,"/var/log/win/%HOSTNAME%/%PROGRAMNAME%.log" * *.* ?RemoteLogs &~ 重启rsyslog服务: service rsyslog restart 参考:http://www.111cn.net/sys/CentOS/81133.htm syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器, 路由器 ,交换机以及其他主机)都可以把日志发送给它。 通过设置一个syslog服务器,可以将不同设施/主机发送的日志,过滤和合并到一个独立的位置,这样使得你更容易地查看和获取重要的日志消息。 rsyslog 作为标准的syslog守护进程,预装在了大多数的Linux发行版中。在客户端/服务器架构的配置下,rsyslog同时扮演了两种角色:1.作为一个syslog服务器,rsyslog可以收集来自其他设施的日志信息;2.作为一个syslog客户端,rsyslog可以将其内部的日志信息传输到远程的syslog服务器。 在此

守护进程编程

雨燕双飞 提交于 2020-03-20 07:41:58
一. 守护进程及其特性 守护进程最重要的特性是后台运行;其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的;最后,守护进程的启动方式有其特殊之处------它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。 总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别,因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。 二. 守护进程的编程要点 1. 在后台运行。 为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使 父进程终止, 让Daemon在子进程中后台执行。 if(pid=fork()) exit(0); //是父进程,结束父进程,子进程继续 2. 脱离控制终端,登录会话和进程组 有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于 一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。 控制终端,登录会话和进程组通常是从父进程继承下来的

Linux守护进程

你离开我真会死。 提交于 2020-03-17 19:50:11
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<fcntl.h> #include<sys/types.h> #include<sys/wait.h> #define MAXFILE 65535 volatile sig_atomic_t _running = 1; void sigterm_handler(int arg) { _running = 0; } int main() { pid_t pc, pid; int i, fd, len, flag = 1; char *buf = "this is a Dameon\n"; len = strlen(buf); //第一步,创建子进程,结束父进程,让init进程收养 pc = fork(); if (pc < 0) { printf("error fork\n"); exit(1); } else if (pc > 0) { exit(0); } //第二步,创建新会话,setsid(set session id),摆脱原会话的控制,摆脱原进程组的控制,摆脱原控制终端的控制 pid = setsid(); if (pid < 0) perror("setsid error"); //第三步,更改工作目录

Linux守护进程

邮差的信 提交于 2020-03-17 19:49:57
1、 java开发守护进程 http://www.cnblogs.com/birdshover/archive/2010/01/11/1644267.html “ 打包,我是用eclipse打包的,导出个jar包就行了。 把文件放到/home/xieping/目录下。文件名 job.jar。 开始设置为守护进程了!! #java -jar job.jar & 简单吧,就加一个&符号。可以查看下 #ps aux|grep job 看到了,果然启动了。 #more /home/xieping/job.log 文件的时间也一直换。 <span style= "color: #800000;" >注意,在开多线程的情况下,进程可能无法终止。</span> <span style= "color: #800000;" >#killall java 或者 #kill 进程ID 无效。需要强制终止。</span> <span style= "color: #800000;" >#kill -9 进程ID。</span> ” 2、 3、 来源: https://www.cnblogs.com/javaskill/p/5717481.html

linux守护进程

人走茶凉 提交于 2020-03-17 19:49:03
#include <signal.h> #include <sys/types/h> #include <sys/stats.h> #include <unistd.h> #include <fcntl.h> void InitDaemon() {   pid_t pid = 0;   if ((pid = fock()) != 0)   {     exit(0);   }   setsid();   signal(SIGINT, SIG_IGN);   signal(SIGHUP, SIG_IGN);   signal(SIGQUIT, SIG_IGN);   signal(SIGPIPE, SIG_IGN);   signal(SIGTTOU, SIG_IGN);   signal(SIGTTIN, SIG_IGN);   signal(SIGCHLD, SIG_IGN);   signal(SIGTERM, SIG_IGN);   signal(SIGHUP, SIG_IGN);   if ((pid = fock()) != 0)   {     exit(0);   }   umask(0); } 来源: https://www.cnblogs.com/damonxu/p/7976403.html

Linux守护进程

懵懂的女人 提交于 2020-03-17 19:48:29
什么是守护进程? 守护进程是生存期长的一种进程,它们常常在系统引导装入时启动,仅在系统关闭时在终止。它们没有控制终端并且在后台运行。Linux 系统中有很多守护进程用以执行系统的日常事物,而且服务器程序一般都作为守护进程运行。大多数守护进程都以超级用户特权运行,而 且用户层守护进程的父进程是init进程。 如果你想查看一下你系统中有哪些守护进程,可以在终端下输入 ps -x 命令查看, TTY 为 ? 的列说明此进程没有控制终端,即守护进程。 一些必要了解的基本概念 进程组:进程组是一个或多个进程的集合。每个进程都属于一个进程组,同一个进程组的各进程接受来自同一终端的各种信号。每个进程组 都有一个唯一的进程组ID。每个进程组都有一个组长进程,组长进程的进程组ID等于其进程ID。 会话:会话是一个或多个进程组的集合。会话通常是由shell的管道将几个进程编成一组的。 例如:在shell下输入如下命令: program1 | program2 & program3 | program4 则在此刻shell中包括3个进程组:登录shell组,由program1和program2组成的进程组,由program3和program4组成的进程组。前两个进程组 是后台进程组,第三个进程组为前台进程组。这三个进程组组成一个会话。 可调用 setsid 函数建立一个新会话

linux守护进程

时光总嘲笑我的痴心妄想 提交于 2020-03-17 19:47:05
  守护进程是一种后台运行并且独立于所有终端控制之外的进程。   守护进程的启动   要启动一个守护进程,可以采取一下几种方式: 在系统期间通过系统的初始化脚本启动守护进程。这些脚本通常在目录etc/rc.d下,通过它们所启动的守护进程具有超级用户的权限。系统的一些基本服务通常都是通过这种方式启动的。 很多网络服务程序都是由inetd守护程序启动的。它监听各种网络请求,如telnet、ftp等,在请求到达时启动相应的服务器程序(telnet server,ftp server等)。 由cron定时启动的处理程序。这些程序在运行时实际上也是一种守护进程。 由at启动的处理程序。 守护程序也可以从终端启动,通常这种方式只用于守护进程的测试,或者是重启因某种原因而停止的进程。 在终端上用nohup启动的进程。用这种方法可以把所有的程序都变成守护进程。   守护进程的建立   先来看一个守护进程建立的例子:     1 #include <sys/types.h> 2 #include <signal.h> 3 #include <unistd.h> 4 #include <syslog.h> 5 6 #define MAXFD 64 7 8 void daemon_init(const char* pname, int facility){ 9 int i; 10 pit_t pid;