在 linux 中,nohup 和 & 的主要区别在于对 sighup 信号的处理;1. & 是将程序放在后台运行,但关闭终端时进程会因收到 sighup 信号而退出;2. nohup 则会忽略 sighup 信号,确保程序即使在终端关闭后仍持续运行;3. 使用 nohup 时默认输出会被重定向至 nohup.out 文件,也可自定义输出文件;4. 若需长时间运行程序应使用 nohup,若仅需临时后台运行则可用 &;5. nohup 程序仍可能因内存不足、磁盘空间不足或被其他进程终止而退出;6. 可通过 ps 或 top 命令查看后台进程;7. 使用 kill 命令加 pid 可停止对应进程,无响应时可加 -9 强制终止。

Linux中,想让程序在后台默默运行,nohup 和 & 都是常用的工具。但它们之间还是有些微妙的区别,用对了能省不少事。

解决方案

简单来说,& 是让命令在后台运行,但当你关闭终端时,这个进程也会收到 SIGHUP 信号而退出。nohup 的作用就是忽略 SIGHUP 信号,让程序在后台持续运行,即使你关闭终端也没关系。
具体用法:

&: command & 直接在命令后面加上 &,程序就被丢到后台运行了。你会看到一个进程 ID (PID)。
nohup: nohup command > output.log 2>&1 & 这个命令稍微复杂一点。nohup 告诉系统忽略 SIGHUP 信号。> output.log 是将标准输出重定向到 output.log 文件,2>&1 是将标准错误也重定向到标准输出(也就是 output.log)。最后的 & 还是让整个命令在后台运行。
nohup 和 & 的区别是什么?
最关键的区别就是对 SIGHUP 信号的处理。& 只是让进程在后台运行,但当终端关闭时,进程会收到 SIGHUP 信号,默认情况下会退出。nohup 会忽略这个信号,保证进程持续运行。
另外,nohup 默认会将输出信息追加到 nohup.out 文件中,如果不想看到这个文件,可以用重定向将输出信息导向其他地方,例如上面例子中的 output.log。
什么时候应该使用 nohup?什么时候应该使用 &?
使用 nohup 的场景: 你需要程序长时间运行,即使关闭终端也不希望它停止。例如,运行一个服务器程序,或者进行长时间的数据处理任务。
使用 & 的场景: 你只是想暂时把程序丢到后台,不需要它长时间运行,或者你知道即使终端关闭,程序也能正常处理 SIGHUP 信号。例如,运行一个简单的脚本,或者启动一个图形界面程序。
为什么我用 nohup 运行的程序还是退出了?
这可能是以下几个原因:
程序自身错误: 程序内部出现了错误,导致崩溃退出,这和 nohup 无关。查看日志文件(例如 nohup.out 或你指定的输出文件),看看有没有错误信息。内存不足: 程序运行需要大量内存,而系统内存不足,导致程序被 kill 掉。被其他进程 kill 掉: 可能有其他进程(例如系统监控进程)认为你的程序占用过多资源,将其 kill 掉。磁盘空间不足: 程序需要写入大量数据到磁盘,但磁盘空间不足,导致程序无法正常运行。
要排查问题,需要仔细查看日志,并监控系统资源使用情况。
如何查看后台运行的程序?
可以使用 ps 命令查看当前运行的进程。例如,ps aux | grep your_program_name 可以查找包含 “your_program_name” 的进程。top 命令可以实时查看系统资源使用情况,包括 CPU、内存等。
如何停止后台运行的程序?
首先,使用 ps 命令找到程序的 PID。然后,使用 kill PID 命令发送 SIGTERM 信号给程序,尝试正常停止程序。如果程序没有响应,可以使用 kill -9 PID 命令发送 SIGKILL 信号强制停止程序。注意,强制停止程序可能会导致数据丢失。
以上就是Linux怎样后台运行程序 nohup与&使用方法对比的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/455781.html
微信扫一扫
支付宝扫一扫