Linux Command
in Linux with 0 comment

Linux Command

in Linux with 0 comment

通用 Command

搜索

命令作用
find .xargs ¦ grep -ri "strname"搜索当前目录所有文件是否包含某个字符串
netstat -tlnp查看端口
ln -s a/b /usr/local/bin添加 b 命令到环境变量
sudo passwd [ username ]修改 root 和普通用户密码

环境变量详解

Vim

:w !sudo tee %

Linux 守护进程(daemon)参考1 参考2 阮一峰

由来:

启动一个基于 node 的简单 http服务器

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

前台任务(foreground job)与后台任务(background job)

node server.js

这样启动的脚本为 “前台任务”,独占命令窗口,运行完成或手动停止,才能执行其他命令。

node server.js &

这样启动的进程就会成为"后台任务"。如果要让正在运行的"前台任务"变为"后台任务",可以先按ctrl + z,然后执行bg命令(让最近一个暂停的"后台任务"继续执行)。

后台任务特点

SIGHUP信号

变为"后台任务"后,一个进程是否就成为了守护进程呢?或者说,用户退出 session 以后,"后台任务"是否还会继续执行?
Linux系统是这样设计的:

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

这就解释了为什么"前台任务"会随着 session 的退出而退出:因为它收到了SIGHUP信号。那么,"后台任务"是否也会收到SIGHUP信号?
这由 Shell 的huponexit参数决定的。

shopt | grep huponexit//查看huponexit参数的值。

大多数Linux系统,这个参数默认关闭(off)。因此,session 退出的时候,不会把SIGHUP信号发给"后台任务"。所以,一般来说,"后台任务"不会随着 session 一起退出。

disown 命令

通过"后台任务"启动"守护进程"并不保险,因为有的系统的huponexit参数可能是打开的(on)。
更保险的方法是使用disown命令。它可以将指定任务从"后台任务"列表(jobs命令的返回结果)之中移除。一个"后台任务"只要不在这个列表之中,session 就肯定不会向它发出SIGHUP信号。

node server.js &
disown //移出最近一个正在执行的后台任务 [-r|-a|-h][自行查阅]

扫描二维码,在手机上阅读!
Responses