免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: gaochang2008
打印 上一主题 下一主题

请教大家一个问题:如何通过自身守护进程启动守护进程,, [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-07-25 09:37 |只看该作者
原帖由 pilgrim_kevin 于 2008-7-25 09:07 发表
同样的目的,我借助脚本来做。在程序里面fork一个新的进程,执行这个脚本。在脚本中kill掉原来的程序进程,用新的程序文件覆盖旧的程序,然后重新执行它。


我脚本是这样写的
        echo "stop the old system"
        #echo
        start-stop-daemon --quiet --oknodo --stop --exec /etc/init.d/A
      
        echo "start the new system"^M
        start-stop-daemon --quiet --start --exec /etc/init.d/A



好像没有什么作用。。

[ 本帖最后由 gaochang2008 于 2008-7-25 09:39 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2008-07-25 09:42 |只看该作者
原帖由 blackuhlan 于 2008-7-24 21:36 发表
A启动时发现有自己名字的进程存在,如果进程号非本进程,杀掉。然后再处理自己要做的事情


有自己名字的进程存在,如果进程号非本进程?(不熟悉shell)  这个怎么作呢。。。

论坛徽章:
0
13 [报告]
发表于 2008-07-25 09:47 |只看该作者
升级完,让升级程序自动执行一段脚本吧,则样似乎最简洁

论坛徽章:
0
14 [报告]
发表于 2008-07-25 09:52 |只看该作者
原帖由 net_robber 于 2008-7-25 09:47 发表
升级完,让升级程序自动执行一段脚本吧,则样似乎最简洁


我是想实现功能,,简介倒是其次,,,升级完后 执行我写的脚本  好像没有反应,,PID 还是一样的

论坛徽章:
0
15 [报告]
发表于 2008-07-25 09:54 |只看该作者
原帖由 gaochang2008 于 2008-7-25 09:37 发表


我脚本是这样写的
        echo "stop the old system"
        #echo
        start-stop-daemon --quiet --oknodo --stop --exec /etc/init.d/A
      
        echo "start the new system"^M
  ...


对于我的目的,脚本是很简单的啊,就是用killall杀掉原来的程序,然后cp new program file overwrite old one,  然后再./program &之。

论坛徽章:
0
16 [报告]
发表于 2008-07-25 09:59 |只看该作者
如果需要知道原来程序的进程号来杀死它,可以在程序中将进程号记录到一个地方(比如说某个临时文件),然后另外的程序或脚本读取这个进程号来杀之。

论坛徽章:
0
17 [报告]
发表于 2008-07-25 10:15 |只看该作者
原帖由 pilgrim_kevin 于 2008-7-25 09:59 发表
如果需要知道原来程序的进程号来杀死它,可以在程序中将进程号记录到一个地方(比如说某个临时文件),然后另外的程序或脚本读取这个进程号来杀之。


我也想过那样,,比较麻烦,,我现在就是简单的方法,,    执行B版本, exit(A) ,,,但是信号函数和定时器有问题,,那个搞不定,,因为先执行B版本的  后退出A,,
是不是定时器和信号函数重入的问题,,

论坛徽章:
0
18 [报告]
发表于 2008-07-25 10:17 |只看该作者
原帖由 pilgrim_kevin 于 2008-7-25 09:59 发表
如果需要知道原来程序的进程号来杀死它,可以在程序中将进程号记录到一个地方(比如说某个临时文件),然后另外的程序或脚本读取这个进程号来杀之。


我也想过那样,,比较麻烦,,我现在就是简单的方法,,    执行B版本, exit(A) ,,,但是信号函数和定时器有问题,,那个搞不定,,因为先执行B版本的  后退出A,,
是不是定时器和信号函数重入的问题,,


  B 版本运行起来以后  定时器一点作用都没,,  A 已经退出了 定时器还是没有作用

论坛徽章:
0
19 [报告]
发表于 2008-07-25 10:50 |只看该作者
这个直接用脚本应该比较方便吧

  1. while [ 1 ]
  2. do
  3. #  if检查到新版本
  4.      pid=`ps -ef|grep "progname"|grep -v "grep"|awk '{print $2}'`;
  5.      if [ ! -z "$pid" ]
  6.      then
  7.          kill -9 "$pid"
  8. #         启动新版本
  9.      fi
  10.   #fi
  11. done
复制代码

论坛徽章:
0
20 [报告]
发表于 2008-07-25 11:32 |只看该作者
我用killall -q xxx即可达到我的目的了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP