工程师(程序员)必会技能:后台运行程序并杀死程序(Nohup)

必会技能

在工程师(程序员)的学习和工作中,天天都在和程序打交道,然后依然有蛮多同学,竟然不知道如何去后台运行程序,并在需要的时候杀死它。


一、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  

好啦,这是每个工程师必会的技能,祝大家学习进步!

你可能感兴趣的:(Linux运维部署)