0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用nohup命令在后台运行进程

CHANBAEK 来源:myfreax 作者:myfreax 2022-12-05 16:25 次阅读

nohup命令用于运行程序或者命令,并忽略所有中断信号SIGHUPSIGHUP是当前控制终端关闭时发送到进程的信号。

通常,当您通过SSH运行命令时,如果连接断开,或者退出SSH,SSH会话将终止在当前TTY启动的进程。

如果你不想被某一程序被终止,可以使用nohup命令。它将忽略所有中断信号,启动的命令程序将继续运行。

nohup命令

nohup命令的语法形式是nohup COMMAND [ARGS]nohup命令仅接受两个选项--help--version,除此之外没有任何其它没有任何选项。

nohup python3 -m http.server命令将会在前台启动Python的HTTP服务器,并将HTTP服务器进程的标准输出重定向到nohup.out文件。

nohup.out文件创建在当前工作目录中。如果运行nohup命令的用户没有当前工作目录的读写权限,nohup.out文件写到用户的家目录中。

nohup python3 -m http.server
nohup: ignoring input and appending output to 'nohup.out'

nohup 命令后台运行

nohup在前台使用不是很有用,因为在命令完成之前,您将无法在当前TTY交互。要使nohup启动的进程在后台运行,请在命令末尾添加&符号。

nohup python3 -m http.server &命令将在后台运行Python的HTTP服务器,并在终端上打印作业ID和进程ID。

当nohup作业进入后台运行后,如果你想将nohup的作业放在前台运行,您可以运行fg命令并指定作业ID,让作业在前台运行。

如果由于某种原因需要终止进程,请使用kill命令后跟进程ID,例如命令kill -9 68823终止nohup命令启动的进程68823。

nohup python3 -m http.server &
 kill -9 68823
[1] 68823
nohup: ignoring input and appending output to 'nohup.out

标准错误与标准输出重定向

默认情况下,nohup会将标准输出和标准错误重定向到nohup.out文件。如果要将命令标准输出和标准错误重定向到其他文件,可以使用shell的重定向符号>

例如命令nohup python3 -m http.server > log 2>&1 &将Python的HTTP服务器进程标准输出和标准错误重定向到文件http.out并在后台运行。

如果你需要分别重定向标准错误和标准输出到不同文件,可以运行命令nohup python3 -m http.server > access.log 2> error.log &

命令将会把Python的HTTP服务器进程标准输出写入文件access.log,标准错误写入文件error.log

nohup python3 -m http.server > log 2>&1 &
nohup python3 -m http.server > access.log 2> error.log &
[1] 71816

如果你想知道命令access.log 2> error.log> log 2>&1有什么不同或者2>&1是什么可以阅读我们的教程标准输入/标准输出/标准错误详解。

重定向标准输出和标准错误/dev/null

/dev/null称空设备文件。在类Unix系统中是一个特殊的设备文件,它丢弃一切写入其中的数据,但报告写入操作成功,读取它则会立即得到一个EOF。

我们经常在使用nohup命令启动进程时,将进程的标准输出和标准错误写入空设备文件/dev/null,来抑制所有的消息输出。

例如命令nohup python3 -m http.server > /dev/null 2>&1 &将会标准输出和标准错误都重定向到空设备文件。

nohup python3 -m http.server > /dev/null 2>&1 &
[1] 71816

结论

至此,您应该很好地理解如何使用nohup命令在后台运行进程,以阻止在退出终端时终止进程。了解如何重定向标准错误和标准输出。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 命令
    +关注

    关注

    5

    文章

    698

    浏览量

    22149
  • SSH
    SSH
    +关注

    关注

    0

    文章

    190

    浏览量

    16428
  • 进程
    +关注

    关注

    0

    文章

    204

    浏览量

    14010
收藏 人收藏

    评论

    相关推荐

    如何在Linux命令行中终止进程

    如果进程在前台运行,你可以使用 Ctrl+C 终端快捷方式。但是,如果进程不可见(在后台运行),你可以使用专用
    发表于 09-20 11:07 1258次阅读

    Linux命令:screen

    可以保持在后台持续运行,不会因为ssh client断开而结束,所以screen也常用来在后台挂服务端程序(与nohup类似)。
    发表于 12-05 11:11 6885次阅读

    后台运行vi

    运行时隐藏在后台运行
    发表于 06-09 14:32

    nohup命令后台运行程序的用途和语法

    nohup命令后台运行程序
    发表于 04-19 10:34

    远程执行后台程序问题

    大佬们,我linux ssh远程后台执行一个jar 退出终端程序就掉了,使用的命令nohup java路径 -jar jar程序 &退出终端后仍然程序挂掉。使用nohup java路
    发表于 11-11 15:59

    前台运行后台运行二者有何区别

    开发环境:DeepIn15.11 开发语言:C语言 测试软件:Final Shell3.0.10 目录分清你的程序是前台运行还是后台运行,二者有何区别 前台运行
    发表于 11-04 08:18

    HarmonyOS判断服务是否在后台运行的方法

    是否在后台运行,代码如下package com.newdemo.myapplication.slice;import com.newdemo.myapplication.MyApplication
    发表于 06-17 09:46

    Linux和UNIX可以用什么命令查看运行进程的相关信息

      你可以使用ps命令。它能显示当前运行进程的相关信息,包括进程的PID。Linux和UNIX都支持ps命令,显示所有
    发表于 01-20 09:42 6499次阅读

    你了解过Linux后台服务进程的开发过程?

    守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程
    发表于 05-13 09:21 1928次阅读

    Linux 后台运行程序

    任务可以对应于一个或者多个进程号。&如果需要在后台运行一个进程,可以在运行命令后边加上 &。这
    发表于 04-02 14:41 819次阅读

    Linux实现前后台切换的命令

    如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的
    的头像 发表于 10-03 13:14 1906次阅读

    Linux操作系统后台:&与nohup的执行命令用法

    大家可能有这样的体验:某个程序运行的时候,会产生大量的log,但实际上我们只想让它跑一下而已,log暂时不需要或者后面才有需要。所以在这样的情况下,我们希望程序能够在后台进行,也就是说,在终端上我们看不到它所打出的log。为了实现这个需求,我们介绍以下几种方法。
    的头像 发表于 10-08 11:46 1491次阅读
    Linux操作系统<b class='flag-5'>后台</b>:&与<b class='flag-5'>nohup</b>的执行<b class='flag-5'>命令</b>用法

    pidof命令:用于查找指定名称进程进程ID

    1.命令简介 pidof 命令用于查找指定名称进程进程ID,是命令 killall5 的一个软链接。 找出
    的头像 发表于 02-02 14:16 3220次阅读
    pidof<b class='flag-5'>命令</b>:用于查找指定名称<b class='flag-5'>进程</b>的<b class='flag-5'>进程</b>ID

    Linux中的kill 和 killall 命令介绍

    如果进程在前台运行,你可以使用 Ctrl+C 终端快捷方式。但是,如果进程不可见(在后台运行),你可以使用专用
    的头像 发表于 10-09 10:27 3325次阅读

    Linux之screen命令

    可以保持在后台持续运行,不会因为ssh client断开而结束,所以screen也常用来在后台挂服务端程序(与nohup类似)。
    的头像 发表于 05-05 14:29 1069次阅读