Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102991
  • 博文数量: 24
  • 博客积分: 105
  • 博客等级: 民兵
  • 技术积分: 244
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-09 20:05
文章分类

全部博文(24)

文章存档

2015年(1)

2014年(9)

2013年(10)

2012年(4)

我的朋友

分类: LINUX

2012-10-24 19:41:25


点击(此处)折叠或打开

  1. #!/bin/sh
  2. #check period
  3. CHECK_PERIOD=10
  4. #the process need to check
  5. PROC_NAME_LIST=`echo "test1 test2 test3 test4"`
  6. #db host name
  7. HOSTNAME=localhost
  8. #db port
  9. PORT=3306
  10. #db user
  11. USERNAME=username
  12. #db passwd
  13. PASSWD=passwd
  14. #database name
  15. DBNAME=db
  16. #table name
  17. DBTABLE=proc_routine
  18. function out_log()
  19. {
  20. DATETIME=`date +"%Y-%m-%d %H:%M:%S"`
  21. INSERT_SQL="INSERT INTO ${DBTABLE} SET proc_status=$1, pid=$2, proc_name='$3', start_time='${DATETIME}';"
  22. # echo ${INSERT_SQL}
  23. mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWD} ${DBNAME} -e "${INSERT_SQL}"
  24. }
  25. function start_proc()
  26. {
  27. case "$1" in
  28. 'test1')
  29. if [ -x /usr/local/bin/test1 ]; then
  30. /usr/local/bin/test1 & >/dev/null
  31. fi
  32. ;;
  33. 'test2')
  34. if [ -x /usr/local/bin/test2 ]; then
  35. /usr/local/bin/test2 & >/dev/null
  36. fi
  37. ;;
  38. 'test3')
  39. if [ -x /usr/local/bin/test3 ]; then
  40. /usr/local/bin/test3 & >/dev/null
  41. fi
  42. ;;
  43. 'test4')
  44. if [ -x /usr/local/bin/test4 ]; then
  45. /usr/local/bin/test4 & >/dev/null
  46. fi
  47. ;;
  48. *)
  49. return 1;
  50. esac
  51. }
  52. function check_proc_start()
  53. {
  54. pname=$1
  55. proc_pid=`pidof ${pname}`
  56. #there need a space around simbol ==
  57. if [ "${proc_pid}" == "" ]; then
  58. start_proc ${pname}
  59. proc_pid=`pidof ${pname}`
  60. if [ "${proc_pid}" == "" ]; then
  61. out_log 0 -1 ${pname}
  62. else
  63. out_log 1 ${proc_pid} ${pname}
  64. fi
  65. fi
  66. }
  67. #[ "$1" != "" ] && PROC_NAME_LIST=$1
  68. while true
  69. do
  70. for onename in `echo ${PROC_NAME_LIST}`; do
  71. check_proc_start ${onename}
  72. done
  73. sleep ${CHECK_PERIOD}
  74. done
代码完成了进程的监控,但是在一段时间后,不仅脚本进程会挂,由脚本启动的进程会连着一起挂掉,做个记录。
1、杀掉进程后,可以被该脚本启动
2、但是有时候该进程,并且包括该进程重启的进程一起挂掉
原因:
内核产生了什么信号,使这个进程组一起走向了死亡
 


阅读(1205) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

letmetryok2012-10-24 20:40:39

补充:由于shell脚本的父进程是终端,关闭终端即父进程退出,由内核向所有的子进程发送SIGHUP信号,系统默认处理为:终止收到该信号的进程。
下面的摘自:http://www.cnblogs.com/jiejnan/archive/2012/08/14/2637742.html
SIGHUP会在以下3种情况下被发送给相应的进程:

1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)

2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程

3、若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。<