1、说明

在linux 环境下,使用 shell 脚本编写一个守护进程,在后台一直运行,监听需要守护的进程名称,如app。
(1)当检测到app进程停止,则将其重新运行
(2)如果出现异常操做,同时运行多个app进程,则kill 进程,避免异常
(3)当app 变为僵尸进程,则kill

2、环境说明

硬件环境: ARM或者其他任意开发板
软件环境: Linux 任意版本

3 原理

使用 ps 和 grep 工具,查找进程,并进行操作

# #! 不是注释符,而是指定脚本由哪个解释器来执行,
# #! 后面有一个空格,空格后面为解释器的全路径且必须正确。
#! /bin/sh# testpro 为要守护的可执行程序,即保证它是一直运行的
PROGRAM="/usr/bin/testpro"# 此脚本一直不停的循环运行,while <条件> 与 do 放在一行上要在条件后加分号
# if、then、while、do等关键字或命令是作为一个新表达式的开头,
# 一个新表达式之前的表达式必须以换行符或分号(;)来结束
# 如果条件不是单个常量或变量而是表达式的话,则要用[]括起来
# while、until与for循环皆以do开始以done结束构成循环体
while true ; do
# 单引号''中的$符与\符没有了引用变量和转义的作用,但在双引号""中是可以的!
# 单引号中如果还有单引号,则输出时全部的单引号都将去掉,单引号括住的内容原样输出。
# 例:echo 'have 'test'' --> have test
# ps aux --> a 为显示其他用户启动的进程;
#                 u 为显示启动进程的用户名与时间;
#                 x 为显示系统属于自己的进程;
# 对于嵌入式开发板,不需要 aux 参数,如果为linux服务器PC版本,则需要aux参数
# ps | grep 可执行程序名 --> 在得到的当前启动的所有进程信息文本中,
#                                            过滤出包含有指定文本(即可执行程序名字)的信息文本行
# 注:假设 ps | grep 可执行程序名 有输出结果,但输出不是一条信而是两条,
# 一个为查找到的包含有指定文本(即可执行程序名字)的信息文本行(以换行符0x10结尾的文本为一行),
# 一个为 grep 可执行程序名 ,即把自己也输出来了,
# 所这条信息是我们不需要的,因为我们只想知指定名字的可执行程序是否启动了
# grep -v 指定文本 --> 输出不包含指定文本的那一行文本信息
# wc -l --> 输出文件中的行数(-l --> 输出换行符统计数)
# ps | grep $PROGRAM | grep -v grep | wc -l --> 如果有指定程序名的程序启动的话,结果大于壹PRO_NOW=`ps | grep $PROGRAM | grep -v grep | wc -l`# 整数比较:-lt -> 小于,-le -> 小于等于,-gt -> 大于,-ge -> 大于等于,-eq ->等于,-ne -> 不等于
# if [条件] 与 then 放在一行上要在条件后加分号
# 如果当前指定程序启动的个数小于壹的话if [$PRO_NOW -lt 1]; then
# 根据个人需求,是否选择进程不输出任何调试信息,如果需要打印,则不重定向 dev/null
# 0 -> 标准输入,1 -> 标准输出,2 - > 标准错误信息输出
# /dev/null --> Linux的特殊文件,它就像无底洞,所有重定向到它的信息数据都会消失!
# 2 > /dev/null --> 重定向 stderr 到 /dev/null,1 >& 2 --> 重定向 stdout 到 stderr,
# 直接启动指定程序,且不显示任何输出
# 可执行程序后面加空格加&,表示要执行的程序为后台运行$PROGRAM 2>/dev/null 1>&2 &
# date >> ./tinfo.log --> 定向输出当前日期时间到文件,添加到文件尾端,如果没有文件,则创建这个文件date >> ./tinfo.log
# echo "test start" >> ./tinfo.log --> 定向输出 test start 添加到文件尾端echo "test start" >> ./tinfo.log# num > 1, 说明有进程异常,出现多个进程同时运行, kill it,重新运行elif [ "${PRO_NOW }" -gt "1" ];thenecho "more pid ${PIDNUM},killall ${PROGRAM }"killall -9 $PROGRAM ${PROGRAM} 2>/dev/null 1>&2 &fi# 基本与上面的相同,就是多了一个 grep T,其结果为过滤出含 T 字符的信息行
# T --> 进程已停止,D --> 不可中断的深度睡眠,R --> 进程运行或就绪,S --> 可接收信号的睡眠,
# X --> 已完全死掉,Z --> 已完全终止PRO_STAT=`ps aux|grep $PROGRAM |grep T|grep -v grep|wc -l`# 如果指定进程状态为已停止的信息大于零的话if [ $PRO_STAT -gt 0 ] ; then
# killall --> 用名字方式来杀死进程,-9 --> 即发给程序一个信号值为9的信号,即SIGKILL(非法硬件指令)
# 也可以不指定信号,默认为SIGTERM,即信号值为15killall -9 $PROGRAMsleep 2$PROGRAM 2>/dev/null 1>&2 &date >> ./tinfo.logecho "test start" >> ./tinfo.logfi# 休息10秒以确保要看护的程序运行起来了,这个时间因实际情况而定sleep 10
# while、until与for循环皆以do开始以done结束构成循环体
done
# exit 用来结束脚本并返回状态值,0 - 为成功,非零值为错误码,取值范围为0 ~ 255。
exit 0

shell 脚本实现的 deamon 守护进程相关推荐

  1. 使用shell脚本对Linux系统和进程资源进行监控

    今天发现一个网站,快课网,感觉还不错,里面有编程,面试,算法等等相关内容. 链接如下:http://www.cricode.com/ 首页便看到这篇文章,正好对Linux和shell等持续关注,转载学 ...

  2. shell脚本作为保证PHP脚本不挂掉的守护进程实例

    前几天开始跑一份数据名单,名单需要提供用户名.是否有手机号.是否有邮箱,用户名单我轻易的获取到了,但是,用户名单有2000w之多,并且去检测用户是否有手机号.是否有邮箱必须得通过一个对外开放的安全接口 ...

  3. python实现DEAMON守护进程

    1 守护进程 1.1 守护进程 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端 ...

  4. 使用 shell 脚本对 Linux 系统和进程资源进行监控

    Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...

  5. windows服务守护进程bat脚本、windows窗体守护进程bat脚本

    线上运行的windows服务和窗体服务程序经常挂掉,只能从windows日志中找到报了底层错误,问题无法定位,目前的办法是在服务器上运行守护进程 window服务守护进程 @echo off titl ...

  6. Linux Shell脚本实现根据进程名杀死进程

    怀念windows下的任务管理器啊,有啥看的顺眼的程序鼠标点几下就能将其干掉. 今天在用Firefox浏览器浏览网页时,界面瞬间卡住了,什么都不能点,测试了下,只有切换到命令行界面(Ctrl+Alt+ ...

  7. deamon守护进程

    在linux下的一种特殊进程称为守护进程,其作用是在后台默默提供服务的,随系统结束而结束,或者是kill -9 的信号结束 daemon,表示守护进程,简称为d(进程名后面带d的基本就是守护进程) p ...

  8. Linux shell脚本编程(一)

    -------------------------------------------------------------------- 注:如果你对python感兴趣,我这有个学习Python基地, ...

  9. Shell脚本和Python查看Nginx并发连接数、进程数和常驻内存占用情况

    Shell脚本查看Nginx并发连接数.进程数和常驻内存占用情况 http://xiaoyongxing1.blog.163.com/blog/static/642807522015144302240 ...

  10. Linux进程学习(孤儿进程和守护进程)

    孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程 ...

最新文章

  1. 练习markdown语法
  2. 基于Android移动终端的微型餐饮管理系统的设计与实现4——Android基础
  3. 硬件加速下webview切换闪屏_网页渲染性能优化 —— 性能优化下
  4. 能测试快充真假的软件,苹果iOS 12可自行测试真假快充:山寨充电器将被洗牌
  5. 用JQuery操作元素的style属性
  6. vue-cli 最强指南
  7. 计算机操作系统(第四版)课后习题答案西电版V2.0校对版
  8. 小米5 android7.1 root,小米MIUI 7 ROOT工具(supersu root) V5.1 最新安卓版
  9. HUAWEI AC+AP设备配置
  10. c# 使用正则表达式 提取章节小说正文全本篇
  11. 树莓派python编程入门与实战_树莓派Python编程入门与实战 PDF 下载
  12. python基础之列表函数(10)
  13. 软件测试入门自学笔记(4)实战项目
  14. Android安全攻防战,反编译与混淆技术完全解析(上)
  15. 坐车看书的人都是在装逼?
  16. Java虚拟机(JVM)面试题(2022年总结最全面的面试题!!!)
  17. matlab中eval的用法
  18. i.MX6ULL GPIO
  19. 信号与系统--冲激响应
  20. windows 透明贴图两套体系

热门文章

  1. 双绞线有两种接法:EIA/TIA 568B标准和EIA/TIA 568A标准。
  2. 用Python做证券指数的三种策略分析
  3. html中表格背景颜色代码,html,表格背景颜色.doc
  4. Mari对称开启后另一半全粉了,变纯色了。
  5. sed替换字符串的贪婪匹配和最小匹配
  6. 《禅者的初心》读书笔记(3)
  7. Java实现阿里云企业邮箱发送邮件
  8. linux 重启startup.sh,centos中startup.sh启动服务脚本
  9. 滴滴出行app——网约车出行的背后(下)
  10. 透镜成像、眼球成像、小孔成像原理