ECS linux server断开后保持进程继续运行

使用 nohup 执行

nohup 的作用顾名思义,它使得后面的命令不会响应挂断(SIGHUP)信号。也就是说,通过远程登录执行 nohup 后,即使退出登录后,程序还是会正常执行。通常情况下,nohup 命令最后会跟上 & 字符,表示将这个命令放至后台执行,这样才能真正做到将这个命令放至后台持续的执行。

操作示例:

1. 正常的执行命令为bash hello.sh,执行结果为每秒输出一行的小程序:

2. 在命令头尾分别加上 nohup 和 &,变为nohup bash hello.sh &,可以看到 nohup 输出了一行信息,再按一下回车键就跳回了 shell 命令行,此时命令已经在后台执行了,nohup 将命令的输出重定向至当前目录的 nohup.out 文件中。同时注意到 nohup 会将对应程序的 PID 输出,PID 可用于需要中断进程时 kill 进程。

3. 通过 tail -f nohup.out 可以持续的查看 nohup.out 的输出,达到监视程序的效果。

4. 在命令中也可以使用重定向将程序的输出改为自己想要的文件名,如 nohup bash hello.sh >hello.log &,则程序的输出就会写到 hello.log 文件中。

5. 若程序不会自动退出,那么此时需要使用 kill 命令来结束进程。比如,可以使用命令 kill -TRM  来操作,其中 PID 即为之前 nohup 输出的值,在此例中该值为 1231。

reference: https://www.cnblogs.com/baby123/p/6477429.html


查看运行的后台进程

(1)jobs -l

jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

(2)ps -ef 

1ps -aux|grep chat.js

a:显示所有程序

u:以用户为主的格式来显示

x:显示所有程序,不以终端机来区分

注:

  用ps -def | grep查找进程很方便,最后一行总是会grep自己

  用grep -v参数可以将grep命令排除掉

1ps -aux|grep chat.js| grep -v grep

  再用awk提取一下进程ID

1ps -aux|grep chat.js| grep -v grep | awk '{print $2}'

3.如果某个进程起不来,可能是某个端口被占用

查看使用某端口的进程

1lsof -i:8090

1netstat -ap|grep 8090

查看到进程id之后,使用netstat命令查看其占用的端口

1netstat -nap|grep 7779

使用kill杀掉进城后再启动

4.终止后台运行的进程

1kill -9  进程号

还有一种方法,使用screen,注意在按下ctrl+A时,如果已经运行了python命令,terminal无反应,但是再按下d,即可分离当前screen。

你可能感兴趣的:(ECS linux server断开后保持进程继续运行)