您当前的位置:网站首页>剃头匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,品质评测

剃头匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,品质评测

2019-07-10 11:28:40 投稿作者:admin 围观人数:229 评论人数:0次

转小叮当载声明

原文:http耒怎样读://www.ruanyifeng.com/blog/2016/02/linux-daemon.html

作者:阮一峰


导读:开发nodejs运用时经常会运用pm2或bt工厂者forever这一类的东西来看护node运用,本文深入浅出地介绍了这类看护进程的原理。

以下是正文部分。

        &nbs剪发匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,质量评测p;                                   

"看护进程"(daemon)便是一向在后台运转的进程(daemon)。

本文介绍如何将一个 Web 运用,发动为看护进程。

一、问题的由来

Web运用写好后,下一件事便是发动,让它一向在后台运转。

这并不简略。举例来说,下面是一个最简略的Node运用server.js,只需6行。

var http = require('http');

http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World');
}).listen(5000);

你在指令行下发动它。

$ node server.js

看上去一切正常,一切人都能快乐地拜访 5000 端口了。可是,一旦你退出指令行窗口,这个运用就一同退出了,无法拜访了。

怎样才干让它变成体系的看护进程(daemon),成为一种服务(service),一向在那里运转呢?

二、前台使命与后台使命

上面这样发动的脚本,称为"前台使命"(foreground job)。它会独占指令行窗口,只需运转完了或许手动间断,才干履行其他指令。

变成看护进程的第一步,便是把它改成"后台使命"(background job)。

$星猫历险记之古城大冒险 node server.js &

只需在指令的尾部加上符号&,发动的进程就会成为"后台使命"。假如要让正剪发匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,质量评测在运转的"前台使命"变为"后台使命",能够先按ctrl + z,然后履行bg指令(让最近一个暂停的"后台使命"持续履行)。

"后台剪发匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,质量评测使命"有两个特色。

  1. 承继当时 session (对话)的规范输出(stdout)和规范过错(stderr)。

    因而,后台使命的一切输出仍然会同步地在指令剪发匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,质量评测行下显现。

  2. 不再承继当时 session 的规范输入(stdin)。

    你无法向这个使命输入指令了。

    假如它企图读取规范输入,就会暂停履行(halt)。

能够看到,"后台使命"与"前台使命"的本质区别只需一个:是否承继规范输入。所以,履行后台使命的一同,用户还能够输入其他指令。


三、SIGHUP信号

变为"后台使命"后,一个进程是否就成为了看护进程呢?或许说,用户退出 session 今后,"后台使命"是否还会持续履行?

Linux体系是这样规划的。

  1. 用户预备退出 session

  2. 体系向该 session 宣布SIGHUP信号

  3. session 将SIGHUP信号发给一切子进程

  4. 子进程收到SIGHUP信号后,主动退出

上面的流程解说了,为什么"前台使命"会跟着 session 的退出而退出:由于它收到了SIGHUP信号。

那么,"后台使命"是否也会收到SIGHUP信号?

这由 She剪发匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,质量评测ll 的huponexit参数决议的。

$ shopt | g元朝皇帝rep huponexit

履行上面的指令,就会看到huponexit参数的值。

大多数Linux体系,这个参数默许封闭(off)。因而,session 退出的时分,不会把SIGHUP信号发给"后台使命"。所以,一般来说,"后台使命"不会跟着 session 一同退出。

四、disown 指令

经过"后台使命"发动"看护进程"并不稳妥,由于有的体系的huponexit参数可能是翻开的(on)。

更稳妥的办法是运用disown指令。它能够将指定使命从"后台使命"列赵德三表(jobs指令的回来成果)之中移除。一个"后台使命"只需不在这个列表之中,session 就必定不会向它宣布SIGHUP信号。

$ node server.js &
$ disown

履行上面的指令今后,server.js进程就被移出了"后台使命"列表。你能够履行jobs指令验证,输出成果里边,不会有这个进程。

disown的用法如下。

$ disown

$ disown -r

$ disown -a

$ disown -h

$ disown %2
$ disown -h %2


五、规范 I/O

运用disown指令之后,还有一个问题。那便是,退出 session 今后,假如后台进程与规范I/O有交互,它仍是会挂掉。

仍是以上面的脚本为例,现在参加一行。

var http = require('http');

http.c胖虎reateServer(function(req, res) {
console.log('server starts...'aimer); res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World');
}).listen(5000);

发动上面的脚本,然后再履行disown指令。

$ node server.js &
$ disown

接基佬王着,你退出 session,拜访5000端口,就会发现连不上。

这是由于"后台使命"的规范 I/O 承继自当时 session,disown指令并没有改动这一点。一旦"后台使命"读写规范 I/O,就会发现它现已不存在了,所以就报错停止履行。

为了处理这个问题,需要对"后台使命"的规范 I/O 进行重定向。

$ node server.js > stdout.txt 2> stderr.txt < /dev/null &
$ disown

上面这样履行,根本上就没有问题了。

六、nohup 指令

还有比disown更便利的指令,便是nohup

$ nohup node server.js &

nohup指令对server.js进程做了三件事奇点。

  • 阻挠SIGHUP信号发到这个进程。

  • 封闭规范输入。

    该进程不再能够接纳任何输入,即便运转在前台。

  • 重定向规范输出和规范过错到文件nohup.out

也便是说,nohup指令实践大将子进程与它地点的 session 分离了。

留意,nohup指令不会主动把进程变为"后台使命",所以有必要加上&符号。

七、Screen 指令与 Tmux 电子讲义指令

另一种思路是运用 terminal multiplexer (终端复用器:在同一个终端里边,办理多个session),典型的便是 Screen 指令和 Tmux 指令。

它们能够在当时 session 里边,新建另一无人知晓的夏天清晨个 session。这样的话,当时 session 一旦完毕,不影响其他 session。并且,今后从头登录,还能够再连上新近新建的 session。

Screen 的用法如下。

$ screen
$ node server.js

然后,按下ctrl + Actrl + D,回到本来的 session,从那里退出登录。下次登录时,再切回去。

$ screen -r

假如新建多个后台 session,就需要为它们指定姓名。

$ screen -S name

$ screen -r name
$ screen -r pid_number

$ screen -ls

假如要停掉某个 session,能够先切回它,然后按下ctrl + cctrl + d

Tmux 比 Screen 功用更多、更强壮,它的根本用法如下。

$ tmux
$ node server.js

$ tmux detach

除了tmux detach,另一种办法是按下Ctrl + Bd ,也能够回到本来的 session。

$ tmux attac烧屁股3h

假如新建多个 session,就需要为每个 session 指定姓名。

$ 大棚歌舞团tmux new -s session_name

$ tmux attach -t sessio姐n_name

$ tmux list-sessions

$ tmux detach

$ tmu同型半胱氨酸x kill-session -t session-name


八、Node 东西

关于 Node 运用来说,能够不必上面的办法,有一些专门用来发动的东西:forever,nodemon 和 pm2。

forever 的功用很简略,便是确保进程退出时,运用会主动重启。

$ forever server.js

$ forever start app.js

$ foreve剪发匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,质量评测r stop Id

$ forever restart Id

$ forever -w server.js

$ forever -m 5 server.js

$ forever list

nodemon一般只在开发时运用,它最大的利益在于 watch 功用,一旦文件发生改变,就主动重启进程。

$ nodemon server.js

# 监督指定文件的改变
$ nodemon --watch app --watch libs server.js

pm2 的功用最强壮痔疮膏,除了重启进程以外,还能实时搜集日志和监控。

$ pm2 start app.js

$ pm2 start app.js -i max

$ pm2 list

$ pm2 stop 0

# 重启指定使命
$ pm2 restart 军事博物馆0

$ pm2 delete 0

$ pm2 save

$ p怕冷是什么原因m2 monit

$ pm2 logs

$ pm2 dump

$ pm2 kill
$ pm2 resurect

$ pm2 web


十、Systemd


除了专用东西以外,Linux体系有自己的看护进程办理东西 Systemd 。它是操作体系的一部分,直接与内核交互,功用超卓,功用极端强壮。咱们完全能够将程序交给 Systemd ,让体体系一办理,成为真实意义上的体系服务。                                   剪发匠,杭州地铁2号线-隐形眼镜,丹阳眼镜城,质量评测                  

the end
隐形眼镜,丹阳眼镜城,品质评测