赞
踩
在实际的Linux App开发中,编写一个程序,在系统后台运行中,难免会因各种原因导致程序意外退出。为了确保程序平稳长时间运行,开发者会实时监控后台程序运行情况。这种背景下,需要开发者定时守护进程,确保正常运行。本期我们采用shell脚本两种简单的方式,向各位演示守护进程的原理。
方案一:
# #! 不是注释符,而是指定脚本由哪个解释器来执行, # #! 后面有一个空格,空格后面为解释器的全路径且必须正确。 #! /bin/sh while true ; do sleep 8 # ps aux --> a 为显示其他用户启动的进程; # u 为显示启动进程的用户名与时间; # x 为显示系统属于自己的进程; # grep -v 指定文本 --> 输出不包含指定文本的那一行文本信息 # wc -l --> 输出文件中的行数(-l --> 输出换行符统计数) # 整数比较:-lt -> 小于,-le -> 小于等于,-gt -> 大于,-ge -> 大于等于,-eq ->等于,-ne -> 不等于 # 0 -> 标准输入,1 -> 标准输出,2 - > 标准错误信息输出 # /dev/null --> Linux的特殊文件,它就像无底洞,所有重定向到它的信息数据都会消失! # 2 > /dev/null --> 重定向 stderr 到 /dev/null,1 >& 2 --> 重定向 stdout 到 stderr PRO_NOW=$(ps aux|grep program | grep -v grep | wc -l) if [ $PRO_NOW = 0 ]; then cd /mnt/qflash ./program 2>/dev/null 1>&2 & fi done # exit 用来结束脚本并返回状态值,0 - 为成功,非零值为错误码,取值范围为0 ~ 255。 exit 0
方案二:
#! /bin/sh while true do proname=$(ps -ef|grep program|awk '{print $9}'|awk 'NR==2{print}') if [ $proname = "program" ]; then echo No else echo yes cd /mnt/qflash ./program & fi sleep 5 done exit(0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。