必会技能
在工程师(程序员)的学习和工作中,天天都在和程序打交道,然后依然有蛮多同学,竟然不知道如何去后台运行程序,并在需要的时候杀死它。
一、Nohup
如果要实现程序的后台运行,现在用的比较多的一种方案就是Nohup。
那么来看看这个到底是什么
Nohup维基百科
nohup是忽略HUP(挂断)信号的POSIX命令。按照惯例,HUP信号是终端警告注销相关过程的方式。
如果输出没有被重定向,那么通常会去往终端的输出会转到名为nohup.out的文件。
二、使用
下面的第一个命令abcd在后台启动程序,以便后续注销不会停止它。
$ nohup abcd &
请注意,这些方法可防止进程在注销时发送“停止”信号,但如果正在接收这些标准I / O文件(标准输入,标准输出或标准错误)的输入/输出,它们仍会挂起终端。
nohup通常与nice命令结合使用,以低优先级运行进程。
nohup nice abcd &
三、案例分析
1.以我电脑中的MongoDB程序为例
传统的启动方式:mongod
$ mongod
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] MongoDB starting : pid=4065 port=27017 dbpath=/data/db 64-bit host=wdMac.local
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] db version v3.6.5
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] git version: a20ecd3e3a174162052ff99913bc2ca9a839d618
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2o 27 Mar 2018
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] allocator: system
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] modules: none
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] build environment:
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] distarch: x86_64
2018-06-08T16:22:28.560+0800 I CONTROL [initandlisten] target_arch: x86_64
....
should be at least 1000
2018-06-08T16:22:29.415+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2018-06-08T16:22:29.415+0800 I NETWORK [initandlisten] waiting for connections on port 27017
传统的有个弊端,就是我命令窗口不能关,我一关,这个程序就停止了,如果是连接到远程的服务器上,有时候,程序会自动停止。
2.后台启动MongoDB
$ nohup nice mongod &
[1] 4075
appending output to nohup.out
4075:端口
mongod:程序的启动命令
3.查看nohup正在运行的后台程序
~ ⌚ 16:27:33
$ jobs -l
[1] + 4075 running nohup nice mongod
4.杀死这个程序
~ ⌚ 16:29:07
$ kill -9 4075
[1] + 4075 killed nohup nice mongod
~ ⌚ 16:29:52
$
四、如果你的程序的启动命令是./ run
类似于:
root@ubuntu:~/develop/nexus/nexus-3.12.1-01/bin# nohup nice ./nexus run &
[1] 9458
查看下是否启动成功:
root@ubuntu:~/develop/nexus/nexus-3.12.1-01/bin# jobs -l
[1]+ 9458 Running nohup nice ./nexus run &
出现下面的标志就说明启动成功了:
root@ubuntu:~/develop/nexus/nexus-3.12.1-01/bin# netstat -anp|grep 8081
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 9458/java
tcp 0 0 192.168.33.125:8081 192.168.33.251:58066 TIME_WAIT -
tcp 0 0 192.168.33.125:8081 192.168.33.251:58067 ESTABLISHED 9458/java
好啦,这是每个工程师必会的技能,祝大家学习进步!