LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
 
主题工具
旧 10-06-23, 08:03 第 1 帖
Mr.Linux
 
 
 
注册会员  
  注册日期: Jun 2010
  帖子: 6
  精华: 0
 

标题: 如何保持程序一直运行?


想要让一个管理程序一直运行,即使被关闭了,也会自动重新运行这个程序。我想能不能监视进程,如该程序不在进程中,自动运行该程序。

请教中……谢谢。
  Mr.Linux 当前离线   回复时引用此帖
旧 10-06-23, 09:29 第 2 帖
x11 帅哥
 
x11 的头像
 
 
注册会员  
  注册日期: Nov 2002
  我的住址: 上海
  帖子: 2,823
  精华: 2
 

inittab







__________________
-..- .---- .----
  x11 当前离线   回复时引用此帖
旧 10-06-23, 10:08 第 3 帖
dwl301
 
 
 
注册会员  
  注册日期: Apr 2007
  帖子: 293
  精华: 0
 

#!/bin/bash
##Name: a.sh
if [ -z `ps ax|grep zzz|grep -v grep` ];then
./zzz
fi
sleep 1
./a.sh

####后台运行a.sh,每秒检查一次zzz是都运行,没有就执行他
#./a.sh &

此帖于 10-06-23 10:10 被 dwl301 编辑. 原因: 修改
  dwl301 当前离线   回复时引用此帖
旧 10-06-23, 11:47 第 4 帖
poet
 
 
 
注册会员  
  注册日期: Jul 2008
  帖子: 1,357
  精华: 1
 

引用:
作者: Mr.Linux
想要让一个管理程序一直运行,即使被关闭了,也会自动重新运行这个程序。我想能不能监视进程,如该程序不在进程中,自动运行该程序。
请教中……谢谢。
一般做法是在启动脚本里面用 while 1 之类的循环把程序包起来。

这样程序一退出,就会进入 while 的下一个循环,继续启动。

如果是监视进程的话,就比较简单,你把该程序作为你的子进程启动,这样一旦进程退出,你就会收到 SIGCHILD 消息。在该信号处理函数中重新启动子进程即可。


通常不推荐使用轮询,因为程序大多数时间是在正常运行,轮询会不必要的消耗系统资源。而我上面两种方法都是被动通知,相关代码仅仅在程序退出的那一瞬间才触发。
  poet 当前离线   回复时引用此帖
旧 10-06-23, 14:41 第 5 帖
icykiss
 
 
 
注册会员  
  注册日期: Oct 2009
  帖子: 23
  精华: 0
 

引用:
作者: poet
一般做法是在启动脚本里面用 while 1 之类的循环把程序包起来。

这样程序一退出,就会进入 while 的下一个循环,继续启动。

如果是监视进程的话,就比较简单,你把该程序作为你的子进程启动,这样一旦进程退出,你就会收到 SIGCHILD 消息。在该信号处理函数中重新启动子进程即可。


通常不推荐使用轮询,因为程序大多数时间是在正常运行,轮询会不必要的消耗系统资源。而我上面两种方法都是被动通知,相关代码仅仅在程序退出的那一瞬间才触发。
嗯,不错,这个想法,思路都是对的。
  icykiss 当前离线   回复时引用此帖
旧 10-06-26, 13:16 第 6 帖
Mr.Linux
 
 
 
注册会员  
  注册日期: Jun 2010
  帖子: 6
  精华: 0
 

引用:
作者: dwl301
#!/bin/bash
##Name: a.sh
if [ -z `ps ax|grep zzz|grep -v grep` ];then
./zzz
fi
sleep 1
./a.sh

####后台运行a.sh,每秒检查一次zzz是都运行,没有就执行他
#./a.sh &
谢谢,收下做参考
  Mr.Linux 当前离线   回复时引用此帖
旧 10-06-26, 13:35 第 7 帖
Mr.Linux
 
 
 
注册会员  
  注册日期: Jun 2010
  帖子: 6
  精华: 0
 

引用:
作者: poet
一般做法是在启动脚本里面用 while 1 之类的循环把程序包起来。

这样程序一退出,就会进入 while 的下一个循环,继续启动。

如果是监视进程的话,就比较简单,你把该程序作为你的子进程启动,这样一旦进程退出,你就会收到 SIGCHILD 消息。在该信号处理函数中重新启动子进程即可。


通常不推荐使用轮询,因为程序大多数时间是在正常运行,轮询会不必要的消耗系统资源。而我上面两种方法都是被动通知,相关代码仅仅在程序退出的那一瞬间才触发。
不是很理解该使用的语句,想学习,能否写一下这个脚本,谢谢。
  Mr.Linux 当前离线   回复时引用此帖
旧 10-07-01, 00:13 第 8 帖
lastart
 
 
 
注册会员  
  注册日期: Feb 2004
  帖子: 912
  精华: 0
 

while [ 1 ]
do
#运行程序
done
  lastart 当前离线   回复时引用此帖
旧 10-08-17, 16:23 第 9 帖
windydays
 
 
 
注册会员  
  注册日期: Oct 2009
  帖子: 9
  精华: 0
 

用upstart
自己编辑文件放到/etc/init/下,参照现成的写
/etc/inittab已经被废了
  windydays 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 11:30


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org