找回密码
 立即注册
Qt开源社区 门户 查看内容

Linux 后台运行任务 nohup 和&

2019-7-4 22:11| 发布者: admin| 查看: 589| 评论: 0

摘要: 介绍nohup用途:不挂断地运行命令。语法:nohup Command 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup. ...

介绍

nohup


用途:不挂断地运行命令。

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

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

如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

退出状态:该命令返回下列出口值:

126 可以查找但不能调用 Command 参数指定的命令。

127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

使用 nohup 运行程序:

  • 输出重定向,默认重定向到当前目录下 nohup.out 文件

  • 使用 Ctrl+C 发送 SIGINT 信号,程序关闭

  • 关闭 ShellSession 发送 SIGHUP 信号,程序免疫

&


使用 & 运行程序:

  • 程序转入后台运行

  • 结果会输出到终端

  • 使用 Ctrl+C 发送 SIGINT 信号,程序免疫

  • 关闭 Shellsession 发送 SIGHUP 信号,程序关闭

使用

后台运行程序


一般两个一起组合使用不会受 CtrlC 和 Shell 关闭的影响:

  1. nohup command &

举例:

  1. # 输出默认重定向到当前目录下 nohup.out 文件

  2. 1. nohup python main.py &

  3. # 自定义输出文件(标准输出和错误输出合并到 main.log)

  4. 2. nohup python main.py >> main.log 2>&1&

  5. # 与上一个例子相同作用的简写方法

  6. 3. nohup python main.py &> main.log &

  7. # 不记录输出信息

  8. 4. nohup python main.py &>/dev/null &

  9. # 不记录输出信息并将程序的进程号写入 pidfile.txt 文件中,方便后续杀死进程

  10. 5. nohup python main.py &>/dev/null & echo $!> pidfile.txt

查看后台运行任务


查看当前有多少在后台运行的命令:

  1. jobs -l

选项可显示所有任务的 PID,jobs 的状态可以是 running, stopped, Terminated 。

注:只有在当前 Shellsession 中可以查看后台运行的程序,退出 Shell 后无法在从 jobs-l 中查询到已经后台运行的程序

杀死后台运行程序


  1. 方法一

启动时输出后台运行程序的进程号,然后读取进程号杀死后台程序:

  1. kill -9`cat pidfile.txt`

  1. 方法二

根据程序名杀死后台进程:

  1. ps -ef | grep 'python main.py'| grep -v grep | awk '{print $2}'|xargs kill -9

其他相关命令


  • Ctrl + z
    可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

  • bg
    将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用 bg%jobnumber 将选中的命令调出。

  • fg
    将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg%jobnumber(是命令编号,不是进程号)将选中的命令调出。

附:Shell中的特殊变量说明

变量说明
$$Shell 本身的 PID(ProcessID)
$!Shell 最后运行的后台 Process 的 PID
$?最后运行的命令的结束代码(返回值)
$-使用 Set 命令设定的 Flag 一览
$*所有参数列表。如 "$*" 用「"」括起来的情况、以 "$1 $2 … $n" 的形式输出所有参数
$@所有参数列表。如 "$@" 用「"」括起来的情况、以 "$1" "$2" … "$n" 的形式输出所有参数
$#添加到 Shell 的参数个数
$0Shell 本身的文件名
$1~$n添加到 Shell 的各参数值。$1 是第 1 参数、$2 是第 2 参数…


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:woodenrobot,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了