给出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 回复
FQ暂时有点问题,创建不了gist,所以直接找了个repo把回答push上去了: https://github.com/spacewander/spacewander-toolbox/blob/master/immortal.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();
@dayuoba 你的问题
- 变量命名,如果你是有c和ruby背景,这个正常
- 等号左右需要有空格,另外逗号,还有
function(data){
应该是function (data) {
- 使用spawn产生子线程没问题,核心业务写到app.js里也可以,这么端的程序没啥必要
- 没有声明sharpbang
- exec_SH命名不合适
- 逻辑好像是有问题的,当进程不在的时候,应该启动它
- 使用setTimeout递归还不错的
- 有多余空行,n=19,整体风格不错,另外声明变量是可以精简的
@i5ting 说的那么详细,多谢指导. 确实我理解错误,没想到是要守护进程.我已经改好了,你可以再看看. 大牛啊,说到递归,我也给你出个题: 找出磁盘最深的目录。 我已在在 demo/deep.js 里实现了。 你是否有更好更快的方法?哈哈.
@i5ting 指出的不错,编辑的时候直接打的,平时使用sublime 进行格式化。还没养成手动加空格的习惯。 function:var isFunction; ConstructorFunction: var ConsFunc; CONST:var CONST/var CONST_FOO; variable:var variables;/var confustion_word;//一般的变量用全小写,有的规范里是和function命名一样。我习惯全小写这样的容易混淆的拼词用下划线。