守护进程

参考资料

问题由来

前台任务,独占命令行窗口,只有运行完了或者手动中止,才能执行其他命令。

前台任务变为后台任务
var http = require('http');

http.createServer(function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World');
}).listen(5000);
  • node app.js -----前台任务
  • node app.js & -----加上&就变成了后台任务,如果让正在运行的前台任务变成后台任务,ctrl+z,然后执行bg命令(让最近暂停的后台任务继续执行)
  • 后台任务的特点:
    1.继承当前session的标准输出(stdout)和标准错误(stderr)。因此,后台任务的输出依然会进行。
    2.不在继承session的标准输入。如果它试图读取标准输入,就会暂停执行
    3.所以前后台任务的区别就是是否继承标准输入。所以执行后台任务的同时,还可以输入其他命令。
sighup信号

前台退出session执行的流程

1.用户准备退出session
2.系统向session发出sighup信号
3.session将sighup信号发给所有子进程
4.子进程收到sighup信号后自动退出。

后台任务不会收到sighup信号
shopt | grep huponexit 默认是off,如果是on,那么后台任务也会挺直

disdown命令
  • disown可以将指定任务从后台任务列表移除,一个后台任务只要不在列表之中就必然不会收到sighup信号。
  • node app.js &
  • disown
标准io

执行disown命令退出session之后,如果与标准io有交互,他还是会挂掉

var http = require('http');

http.createServer(function(req, res) {
 console.log('server starts...'); // 加入此行
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Hello World');
}).listen(5000);
node app.js &
disown

在访问5000发现连不上,这是因为当前标准io不存在了,所以要重定向

node server.js > stdout.txt 2>stderr.txt</dev/null&
nohup命令

nohup node server.js&

  • 阻止dighup信号发到该进程
  • 关闭标准输入
  • 重定向标准输出和标准错误
Screen 命令与 Tmux 命令
node工具

forever nodemon pm2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值