Linux如何使用nohup后台运行命令_Linux nohup后台运行命令思路

秋枫君_5474

秋枫君_5474

2026-04-06

379人浏览

原创

nohup command & 必须加 & 才能后台运行,否则仍前台阻塞;需显式重定向日志避免写入失败或混杂;python 应加 -u 参数防止输出缓冲延迟;查杀进程需用 ps/pgrep/kill 等标准工具。

linux如何使用nohup后台运行命令_linux nohup后台运行命令思路

nohup command & 为什么必须加 &

不加 &nohup 会占用当前终端、阻塞 shell 输入,和前台运行没区别。它只负责忽略 SIGHUP,不负责“后台化”——那是 & 的事。

常见错误现象:nohup python app.py 执行后光标不动、无法输入新命令,误以为卡死;其实程序在前台跑着,只是不挂断而已。

  • nohup command & 是最小可用组合,缺一不可
  • 如果已漏掉 &,按 Ctrl+Z 暂停后执行 bg 可补救,但此时未触发 nohup 机制,仍可能被终端关闭终止
  • 某些脚本启动后立即退出(如 daemon 化失败),& 能让 shell 尽快返回控制权,方便后续检查

输出重定向不写会怎样

不显式重定向时,nohup 默认把 stdoutstderr 合并追加到当前目录的 nohup.out。但这个行为有隐性风险:

  • 当前目录不可写(比如权限不足、磁盘满、是只读文件系统)→ nohup 直接报错退出,命令根本没跑起来
  • 多个 nohup 命令在同一目录下运行 → 全部往同一个 nohup.out 写,日志混杂难排查
  • 你用 cd /tmp && nohup ./run.sh &,但脚本里又 cd /home/user → 日志仍写在 /tmp/nohup.out,不是你预期的位置

推荐始终显式指定:nohup ./run.sh > run.log 2>&1 &

Reddo
Reddo

一款AI视频创作工具,主要用于Reddo产品搜索引擎,说出需求,直达产品/游戏/工具/公司/工作/文章/视频/商品,适合需要提升相关任务效率的用户。

下载

Python 脚本要加 -u 参数吗

要,尤其当你要用 tail -f 实时看日志时。python 默认对 stdout 做行缓冲(line buffering)或全缓冲(full buffering),而重定向到文件后会自动切到全缓冲模式,导致日志延迟几秒甚至几十秒才落盘。

-u 强制无缓冲输出,让每行 print() 立即写入文件:

nohup python -u main.py > app.log 2>&1 &
  • 不加 -u:日志“看起来卡住”,tail -f app.log 长时间没新内容,实际可能已生成但没刷盘
  • print(..., flush=True) 可局部替代 -u,但不如全局加参数省心
  • 其他语言类似:Node.js 加 --unhandled-rejections=throw 不解决缓冲问题,得靠 process.stdout.write() + flush 或环境变量

nohup 启动的进程怎么查、怎么关

nohup 本身不提供进程管理能力,它只是给进程加了个信号屏蔽层。查和关都得靠标准 Linux 工具:

  • 查进程:ps aux | grep "python.*main.py" 或更准一点 pgrep -f "main.py",注意别漏掉 grep 自身那条
  • 关进程:kill <code>PID(优雅退出),kill -9 <code>PID(强制杀),不要用 pkill -f 随意匹配,容易误杀同名进程
  • 没有“一键查 nohup 进程”的命令;jobs 只显示当前 shell 启动的作业,nohup 启动的已脱离 job 控制,jobs 列不出来

真正容易被忽略的是:nohup 不改变进程的父进程(PPID),它仍是你启动它的那个 shell 的子进程;一旦那个 shell 退出,进程 PPID 变成 1(init/systemd),但 nohup 本身并不记录 PID 或提供句柄——所以要么自己记下 PID,要么靠名字/参数 grep,没有捷径。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

nohup

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2240

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

229

24

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

3716

8

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.28

1175

5

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1518

5

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

2023.08.17

9163

11

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

820

4

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

2184

5

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.14

1409

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.1万人学习