当前位置: 首页 > news >正文

Linux 理解 nohup cmd 后台运行机制

nohup cmd & 是 Linux/Unix 系统中非常常用的命令。

简单来说,这个命令的目的是:让一个命令在后台运行,并且在你退出终端(或断开 SSH 连接)后,这个命令也不会被终止。

下面我们把它拆解成两部分来理解:

1. &(与号) - 后台运行

  • 功能:将一个命令放到后台运行。
  • 效果:
    • 终端会立即释放,你可以继续输入其他命令,而不用等待 cmd 执行完毕。
    • 系统会给你一个后台任务的编号([job_id])和它的进程 ID(PID)。
    • 命令的输出默认还是会显示在终端上。

如:

$ sleep 60 &
[1] 9130  # [1] 是作业编号,9130 是进程ID
$ # 这里Shell提示符立刻返回,你可以继续工作

注意:如果你此时直接关闭终端,这个 sleep 60 进程会被终止。因为它仍然是当前终端 Shell 的子进程,终端退出时,它会向所有子进程发送 SIGHUP 挂断信号。

2. nohup - 忽略挂断信号

  • 功能:nohup 是 "no hang up" 的缩写,意为“不挂断”。它会让后面的命令忽略 SIGHUP 信号。

  • 效果:

    • 当你退出终端时,系统发送的 SIGHUP 信号对这个命令无效。

    • 为了保证命令的输出不丢失,nohup 会自动将命令的标准输出(stdout)和标准错误(stderr)重定向到当前目录下一个名为 nohup.out 的文件中。如果没有写权限,则会重定向到 ~/nohup.out。

如:

$ nohup sleep 60
# 此时程序在前台运行,如果你按 Ctrl+C 会终止它,但如果你直接关闭终端,它不会被终止。

3. nohup cmd & - 强强联合

将两者结合,nohup cmd & 就实现了我们最初说的目标:

  • & 将命令扔到后台,不占用当前终端。

  • nohup 让命令免疫终端关闭带来的影响,并将输出保存到文件。

$ nohup python my_long_script.py &
[1] 23456
$ tail -f nohup.out  # 你可以动态查看输出日志

现在,你可以安全地关闭终端,或者断开 SSH 连接,my_long_script.py 这个 Python 脚本会继续在服务器上运行。

最佳实践

命令

作用

说明

nohup

免疫挂断

使进程忽略  SIGHUP  信号,从而在终端退出后存活。

cmd

要执行的命令

可以是任何程序或脚本,如  python app.py, java -jar server.jar  等。

&

后台运行

不阻塞当前终端,立即返回提示符。

nohup.out

默认输出文件

自动创建的日志文件,保存  stdout  和  stderr。

  1. 自定义输出文件:默认的 nohup.out 文件可能会变得很大,或者多个命令会混在一起。最好自定义输出文件。

nohup command > custom_output.log 2>&1 &
  • > :将标准输出重定向到 custom_output.log。

  • 2>&1:将标准错误(文件描述符 2)重定向到标准输出(文件描述符 1)相同的地方,即也写入 custom_output.log。

  1. 查看后台任务:

    • 在当前终端内,可以用 jobs -l 查看由当前 Shell 启动的后台任务。

    • 在任何地方,可以用 ps aux | grep command_name 来查找进程。

  2. 终止后台任务:

    • 先用 ps aux | grep command_name 找到其 PID。

    • 然后使用 kill PID 来终止它。

更现代化的替代品

对于长时间运行的服务,使用 nohup 是经典方法,但现在有更专业、功能更强的工具,如:

  • tmux 或 screen:终端复用器,可以创建虚拟会话,即使断开连接,会话也在后台运行,随时可以重新接入。

  • systemd:为系统服务设计的初始化和管理系统,可以更好地管理守护进程的启动、停止、日志和自启。

  • supervisor: 这是一个用 Python 开发的进程管理工具,用于在类 Unix 系统中监控和控制多个进程。

http://www.dtcms.com/a/582572.html

相关文章:

  • Java 开发 - HashMap 遍历元素的同时删除元素抛出 ConcurrentModificationException 异常(原理分析、解决方案)
  • 昆明如何做百度的网站做足彩推荐赚钱的网站
  • WSL2 安装Ubuntu卡在安装进度0%无响应问题解决
  • 微服务网站天津网站制作网页
  • h5互动网站建设顺企网官网
  • Maven介绍
  • C++ 递推与递归:两种算法思想的深度解析与实战
  • WPP Media(群邑)优质服务能力 再度蝉联京东京牌五星认证
  • 装修公司网站建设费用宁波seo基础入门
  • mysql 网站 数据库站长之家工具高清
  • 如何在k8s中配置并使用nvidia显卡
  • 【天野学院5期】 第5期易语言半内存辅助培训班,主讲游戏——手游:仙剑奇侠传4,端游:神魔大陆2
  • 深度学习-损失函数
  • 淮南建设公司网站如何做外围网站的代理
  • 测试开发话题11---自动化测试实战篇
  • 单播、广播、组播
  • 不用建网站怎么做淘宝客wordpress 分类分页
  • 防水网站的外链如何找临汾市网站建设
  • 公司app与网站建设方案网站域名备案密码
  • 【智慧城市】2025年华中农业大学暑期实训优秀作品(2):基于Vue框架和Java后端开发
  • C++面试常见问题
  • 品牌网站建设权威logo库官网
  • AI驱动开发新范式:基于 CodeWave 的考勤系统落地实践
  • PCI总线驱动开发全解析
  • 做网站数据库表设计Wordpress企业主题XShuan
  • 买完域名网站怎么设计房产中介网站开发模板
  • AVL树实现
  • Vue 组件插槽的深层传递
  • HENGSHI SENSE 6.1 发布,从 ChatBI 到 Agentic Analytics
  • 网站 哪些服务器wordpress新编辑器分类