linux命令之nohup

Posted 生信学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux命令之nohup相关的知识,希望对你有一定的参考价值。


nohup命令参考

用途:该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)

  • 语法:nohup Command [ Arg … ] [ & ]

  • 描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部

将任务移至后台

在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行。比如我们要在后台运行一个aaa.sh的脚本:

 ./test2.sh &                                                             

可是当我们注销或者屏保后,这个脚本就会自动停止,这时我们就需要nohup命令, 怎样使用nohup命令呢?请看:

[wangdong@frontend ~]$ nohup ./test2.sh &
[1] 18569    
[wangdong@frontend ~]$ nohup: ignoring input and appending output to `nohup.out'

注意:

  • 只有当虚拟终端是 $ 或者 # 时候(如下图所示),才可关闭此终端,否则可能导致已经启动的进程被关闭(如果程序持续输出信息而没有出现 $ 或 #,按一下enter即可)

  • 后台执行脚本(有多个脚本,每个窗口最好只执行一个),如果在同一个窗口执行,下个执行命令需要等待前面一个执行完成才能执行,这种效率不是我们要的。

  • 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中,起到了log的作用。

  • 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。除非另外指定了输出文件:nohup command > myout.file 2>&1 &

  • /dev/null 是黑洞路径, 可用于用于丢弃输出,例如nohup COMMAND > /dev/null &

其他操作

用 jobs 命令可以查看当前Screen中的后台任务。

jobs
[1]+  Done                    nohup ./test2.sh

(1)jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业。

(2)jobs -l 选项可显示所有任务的PID,

(3)jobs的状态可以是running, stopped, Terminated

但当关闭该窗口在打开查看,这时候jobs已经不能使用,只能通过以下方式查看后台执行的脚本是否正在执行

ps -ef | grep conda 

#grep conda用于过滤命令

linux命令之nohup

用 fg JOBID 命令可以将后台的任务调入前台继续运行(Foreground)。

  如果执行完后台脚本命令,当前窗口没有关闭,可以执行jobs查看当前窗口运行的后台进程的进程号,再通过fg n,将此后台进程调到前台执行。

命令在前台执行一半了,想转入后台执行

  • 首先用 ctrl + z 快捷键可以将一个正在前台执行的命令放到后台,并且暂停

  • 接着用 bg JOBID 命令可以将一个在后台暂停的命令,变成继续执行(Background)。

进程的终止

前台进程的终止:ctrl+c

后台进程的终止:

方法一:通过jobs命令查看job号(假设为num),然后执行kill num

方法二:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid   

补充

概念:当前任务

  如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果未指定jobsid,则所变动的均是当前任务。

ps -ef 是用标准的格式显示进程的

其中各列的内容意思如下

UID    //用户ID、但输出的是用户名 
PID    //进程的ID 
PPID    //父进程ID 
C      //进程占用CPU的百分比 
STIME  //进程启动到现在的时间 
TTY    //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 
CMD    //命令的名称和参数

参考

(1)http://rajaruan.blog.51cto.com/2771737/822199

(2)https://wenku.baidu.com/view/28863c79581b6bd97f19ead8.html

(3)http://blog.sina.com.cn/s/blog_673ee2b50100iywr.html


以上是关于linux命令之nohup的主要内容,如果未能解决你的问题,请参考以下文章

Linux的后台执行进程之nohup

Linux之nohup命令

Linux让程序后台运行命令之screen与nohup

Linux恶心语法解读之nohup&2>&1

Linux部署Django:报错 nohup: ignoring input and appending output to ‘nohup.out’

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