linux后台执行命令:&与nohup的用法

背景:电脑使用ssh工具远程连接服务器跑深度学习的时候,本地的终端叉掉的时候,会把服务器上的代码进程一起叉掉了,这在实际场景中,非常的不方便,因为不可避免会遭受不可抗拒的原因需要代码只在服务器上跑,比如,网络原因ssh连接不稳定,本地电脑断电等。

一.nohub使用

A.nohub运行

直接上最常用的命令:

nohup python -u main.py > log.file &

命令解释:

  • nohup就是不挂断的意思( no hang up)。
  • 【python main.py】是你原本运行程序的命令。
  • 【-u】 这个参数加在python的后面,是为了可以实时查看输出,而不用等把一段日志文件写入log.file后才能查看。
  • 【log.file】将输出保存到这个文件中。(如果仅仅如此使用nohup命令的话,程序的输出会默认重定向到一个nohup.out文件下。log.file是我们自己指定的输出文件。)
  • 在命令的末尾加个&符号后,程序就可以在后台运行了,但是一旦当前终端关闭(即退出当前帐户),该程序就会停止运行。
  • nohub是不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行。
  • 指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出。
  • 那么,我们可以巧妙的吧他们结合起来用就是nohup COMMAND &这样就能使命令永久的在后台执行。

运行完这条命令后,代码就会永久的在后台执行了。然后终端就会这里就会显示运行代码前的样子。但是注意,此时如果直接叉掉终端,服务器中的程序仍然会停止运行,解决方案就是在终端中输入exit断开ssh连接,这样可以叉掉终端。

B.实时查看输出的命令

在终端输入如下命令:

tail -f log.file

二.如何在linux下杀死nohup提交到后台运行的程序?

方法1:

  1. 如果还没有退出运行nohub命令的终端界面,可以先通过 “jobs” 命令查看程序是否在运行,此时只有序号没有PID号;
  2. 输入命令 “jobs -l” 会显示程序的PID号,然后通过 “kill -9 PID”杀死程序;
  3. 输入命令 “jobs” 查看程序是否被杀死。

方法2:

  1. 如果已经退出了nohub命令的终端界面,输入 “jobs” 命令则查不到正在运行的程序;
  2. 输入 “ps ux” 来查看所有程序的进程号PID,然后再通过 “kill -9 PID” 杀死程序;
  3. 输入 “ps ux” 来查看程序是否被杀死。

参考文章:

  1. https://blog.csdn.net/qq_38835492/article/details/80554774
  2. https://blog.csdn.net/hahameier/article/details/107325070
  3. https://blog.csdn.net/SanyHo/article/details/109522358

你可能感兴趣的:(linux,运维,服务器)