daemon函数说明

# 该函数的作用是启动一个可执行的二进制程序:
# 使用方法:
# 、daemon {--check program|--check=program} [--user username|--user=username] [--pidfile pidfile|--# pidfile=pidfile] [+/- nice]
# 、daemon [--user username|--user=username] [--pidfile pidfile|--pidfile=pidfile] [+/- nice] {program}
# [program options]
# 说明:
# 调用该函数时:
# 方法1:可以使用--check 来指定可运行二进制程序;
# 方法2:还可以在以破折号开头的参数后直接跟二进制程序.
# 但是,如果二进制程序运行时一定要带一些参数的话,最好使用方法2.
# 注意:
# 如果调用函数 daemon 启动一个二进制可执行程序时。没有指定pidfile文件所在的位# 置。有可能会造成程序的再次启动。因为,函数默认是到/var/run/目录下找一个进程的进程
# 号的。如果找不到就再次启动二进制程序。
# A function to start a program.
daemon() {
# Test syntax.
local gotbase= force= nicelevel corelimit
# 设置局部变量,用来保存调用该函数传递过来的参数
local pid base= user= nice= bg= pid_file=
nicelevel=
while [ "$1" != "${1##[-+]}" ]; do
# 该循环条件作用是:找出哪个参数是可执行程序。循环到可执行程序参数就结束while循环。
# 因为其它参数前面都有破折号标志(--),符合while循环条件.如:---user 或 --pidfile
# 所以调用该函数时:如果指定了运行该二进制程序的用户是谁--user 或 运行程序的pid文件# 等这些选项参数,调用该函数时,一定要把这些参数放在二进制可运行程序参数前。
# 由于可运行程序这个参数没有破折号标识,当while循环到该参数时,就结束循环。这带来一个
# 好处:有些二进制可运行程序运行时要带选项才能运行。就可以在二进制可运行程序后面添加
# 二进制执行程序的选项。
# 如:想运行nrpe这服务: 要指定配置文件和是以超级守护进程方式还是独立守护进程方式。
# daemon --pidfie=/var/run/nrped.pid /usr/local/nagios/bin/nrpe -c /etc/nagios/nrpe.conf -d
# 选项一般要使用破折号标明。 case $ in
#下面的case是检测二进制执行程序前的其它参数的。把符合条件的参数使用前面定义的变量记录
#下来
'') echo $"$0: Usage: daemon [+/-nicelevel] {program}"
return ;;
--check)
base=$
gotbase="yes"
shift
;;
--check=?*)
base=${#--check=}
gotbase="yes"
shift
;;
--user)
user=$
shift
;;
--user=?*)
user=${#--user=}
shift
;;
--pidfile)
pid_file=$
shift
;;
--pidfile=?*)
pid_file=${#--pidfile=}
shift
;;
--force)
force="force"
shift
;;
[-+][-]*)
nice="nice -n $1"
shift
;;
*) echo $"$0: Usage: daemon [+/-nicelevel] {program}"
return ;;
esac
done #####################################################################
# Save basename.
[ -z "$gotbase" ] && base=${##*/}
# 如果没有使用--check来指定二进制执行程序就执行 && 后面的参数替换。找出二进制执行
# 程序并保存在变量里。
# See if it's already running. Look *only* at the pid file.
__pids_var_run "$base" "$pid_file" # 判断该二进制程序是否运行的。
[ -n "$pid" -a -z "$force" ] && return
# 如果找到进程的进程号, 直接返回。就不往下执行了。
# make sure it doesn't core dump anywhere unless requested # 资源限定
corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}"
# if they set NICELEVEL in /etc/sysconfig/foo, honor it
[ -n "${NICELEVEL:-}" ] && nice="nice -n $NICELEVEL"
# Echo daemon
[ "${BOOTUP:-}" = "verbose" -a -z "${LSB:-}" ] && echo -n " $base"
# And start it up. # 如果bash shell 执行到这,就启动二进制程序。
if [ -z "$user" ]; then
$nice /bin/bash -c "$corelimit >/dev/null 2>&1 ; $*"
# 启动该二进制程序
else
$nice runuser -s /bin/bash - $user -c "$corelimit >/dev/null 2>&1 ; $*"
#如果调用该函数时指定了--user就使用该方式启动启
fi
[ "$?" -eq ] && success $"$base startup" || failure $"$base startup"
#根据 if 语句的执行结果$?来判断启动二进制程序是否成功
#启动成功就调用函数:success 反之则调用函数:failure
}

init.d functions的daemon函数的更多相关文章

  1. Linux学习之/etc/init.d/functions详解

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28773997&id=3996557 /etc/init.d/f ...

  2. (转)/etc/init.d/functions详解

    转自:https://www.cnblogs.com/image-eye/archive/2011/10/26/2220405.html functions这个脚本是给/etc/init.d里边的文件 ...

  3. /etc/rc.d/init.d/functions文件详细分析

    /etc/rc.d/init.d/functions文件详细分析 functions这个脚本是给/etc/init.d里边的文件使用的(可理解为全局文件). 提供了一些基础的功能,看看里边究竟有些什么 ...

  4. bootloader启动代码init.s解析----IRQ中断处理函数

    bootloader启动代码init.s解析----IRQ中断处理函数 init.s源代码如下: ;///////////////////////////////////////////// ;opt ...

  5. 前端测试框架Jest系列教程 -- Global Functions(全局函数)

    写在前面: Jest中定义了很多全局性的Function供我们使用,我们不必再去引用别的包来去实现类似的功能,下面将列举Jest中实现的全局函数. Jest Global Functions afte ...

  6. 一兄弟把/etc/init.d/functions误删除了,这是多么悲催的节奏啊;

    RPM resource /lib/lsb/init-functions /lib/lsb/init-functions vs. /etc/init.d/functions in init scrip ...

  7. Daemon函数的用法

    Daemon函数的用法 说明: 让一个程序后台运行. 原型: #include <unistd.h> int daemon(int nochdir, int noclose); #incl ...

  8. daemon函数的原理及使用详解

    在linux系统下创建守护进程的原理及步骤在文章(链接如下)中介绍过.http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&a ...

  9. daemon函数实现原理 守护进程

    linux提供了daemon函数用于创建守护进程,实现原理如下: #include <unistd.h> int daemon(int nochdir, int noclose); 1.  ...

随机推荐

  1. 使用MATLAB对图像处理的几种方法(下)

     试验报告 一.试验原理: 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操作,直方图是对像素灰度值的统计,直方图均衡是对 ...

  2. 学习SpringMVC——你们要的REST风格的CRUD来了

    来来来,让一下,客官,您要的REST清蒸CRUD来了,火候刚刚好,不油不腻,请慢用~~~ 如果说前面是准备调料,洗菜,切菜,摆盘,那么今天就来完整的上道菜,主要说的是基于REST风格实现数据的增删改查 ...

  3. 关于png、jpg、gif切图时的使用感悟

    关于png.jpg.gif切图时的使用感悟 曾经切图时都是一股脑所有图全切成jpg格式,最近突然心血来潮简单的研究了下其他图片格式的具体属性,才突然发现走了不少弯路,并没有做到使图片用最小体积展现出最 ...

  4. ASP.NET Core 中文文档 第四章 MVC(3.4)如何使用表单

    原文:Working with Forms 作者:Rick Anderson.Dave Paquette.Jerrie Pelser 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) 这篇文章演示了 ...

  5. DNS报文格式(RFC1035)

    一.域名和资源记录的定义 1.Name space definitions 2.资源记录定义(RR definitions)      2.1 格式          后面分析报文的时候详细解释.   ...

  6. DataTable的orderby有关问题

    在网上找了一个在后台重新对DataTable排序的方法(之所以不在数据库是因为我生成的是报表,写了存储过程用的表变量,order by也要用变量,死活拼不起来,sql能力没过关,动态sql也试了) s ...

  7. 关于for循环的几个小练习,例如奇数偶数,阶乘,求和等

    1 .100以内的奇数和偶数 var js = ""; var os = ""; for(var i=1;i<101;i++) { if(i%2 == 0 ...

  8. 面向云的.net core开发框架

    目录结构 1 为什么搭建面向云的.Net core云开发框架 2 主要设计思路 3 项目解决方案 4 基础设施层 4.1反射工具 4.2多级可换源的配置(上) 42多级可换源的配置(下) 4.3可配置 ...

  9. [转载]IIS7报500.23错误的解决方法

    原文出处: 原文作者:pizibaidu 原文链接:http://pizibaidu.blog.51cto.com/1361909/1794446 背景:今天公司终端上有一个功能打开异常,报500错误 ...

  10. 【原】JAVA开发环境搭建

    1.JDK下载并安装,以jdk-7u45-windows-i586.exe为例(注意JDK的安装和JRE的安装是分开的) 2.“我的电脑”右键属性,找到“高级系统设置”,找到“高级”tab下的“环境变 ...