出题:如何保证一个程序一直在执行?
发布于 9 年前 作者 i5ting 4364 次浏览 最后一次编辑是 8 年前 来自 分享

给出mac 下shell版本

#!/bin/sh
#=====================
#
# ps -ef|grep Thunder.app
#=====================
while :
do
  stillRunning=$(ps -ef |grep "Thunder.app" |grep -v "grep")
  if [ "$stillRunning" ] ; then
    echo "Thunder.app service was already started"
  else
    echo "Thunder.app service was not started"
    echo "Starting Thunder.app service ..."
    `open /Applications/Thunder.app`
  fi
  sleep 6
done

请用nodejs实现,代码放到github上,回贴中留下地址,我会去review

16 回复

知识点

  • child_process

FQ暂时有点问题,创建不了gist,所以直接找了个repo把回答push上去了: https://github.com/spacewander/spacewander-toolbox/blob/master/immortal.js

不要用shell文件,减少依赖,完全用node去写

楼主在面试程序员么?这么牛气

给4楼点赞,好霸气

都提示到这份上了,照着葫芦画瓢还不容易? https://github.com/hezedu/SomethingBoring/blob/master/isDie.js

  function daemon(){                                                                                                                                                                                         
       var new_app=require('child_process').spawn('node',['./app.js']);
       new_app.on('exit',function(code){
           daemon();
       });
       new_app.stdout.on('data',function(data){
           console.log(data.toString());
       });
   }
  daemon();

@leapon 哥面过几百人吧,哈哈,不过这个题目纯属娱乐

@dayuoba 你的问题

  • 变量命名,如果你是有c和ruby背景,这个正常
  • 等号左右需要有空格,另外逗号,还有 function(data){ 应该是 function (data) {
  • 使用spawn产生子线程没问题,核心业务写到app.js里也可以,这么端的程序没啥必要

@hezedu

  • 没有声明sharpbang
  • exec_SH命名不合适
  • 逻辑好像是有问题的,当进程不在的时候,应该启动它
  • 使用setTimeout递归还不错的
  • 有多余空行,n=19,整体风格不错,另外声明变量是可以精简的

@i5ting 说的那么详细,多谢指导. 确实我理解错误,没想到是要守护进程.我已经改好了,你可以再看看. 大牛啊,说到递归,我也给你出个题: 找出磁盘最深的目录。 我已在在 demo/deep.js 里实现了。 image 你是否有更好更快的方法?哈哈.

@i5ting 指出的不错,编辑的时候直接打的,平时使用sublime 进行格式化。还没养成手动加空格的习惯。 function:var isFunction; ConstructorFunction: var ConsFunc; CONST:var CONST/var CONST_FOO; variable:var variables;/var confustion_word;//一般的变量用全小写,有的规范里是和function命名一样。我习惯全小写这样的容易混淆的拼词用下划线。

@leapon 我印象中他有个小徒弟。。。这次的题目是给你小徒弟出的吗 @i5ting

又可以新增一个板块

挺好玩的,省得最近都是招聘贴……

回到顶部