高效管理 Linux 进程:如何后台执行程序、查看进程、终止任务

news2024/9/21 22:45:09

目录

  • 前言
  • 一、nohup命令详解
    • 1-1、nohup命令介绍
    • 1-2、语法格式
      • 1-2-1、基础语法介绍
      • 1-2-2、执行脚本文件
      • 1-2-3、执行python文件
      • 1-2-4、拓展延申:在服务器上运行后台进程
      • 1-2-5、nohup和&的区别
  • 二、进程查看
    • 2-1、jobs命令(基本不用)
    • 2-2、ps命令
    • 2-3、top命令
  • 三、终止进程
    • 3-1、进程终止概念介绍
    • 3-2、kill命令介绍
  • 总结


前言

高效管理 Linux 进程:如何后台执行程序、查看进程、终止任务

一、nohup命令详解

1-1、nohup命令介绍

nohup:nohup是“no hangup”的缩写,用于在后台不挂断的运行命令,使其在用户退出或终端关闭时不受影响。它通过忽略挂断(SIGHUP)信号实现这一功能。换句话说,nohup 是一条 Unix 命令,用于在后台执行程序,即使当前终端会话已经关闭或者断开,程序也可以继续运行。nohup 命令的使用非常简单,只需要在要执行的命令前加上 nohup 和 & 符号即可。

1-2、语法格式

1-2-1、基础语法介绍

nohup 命令的语法如下

nohup command [arg...] &

# 其中,command 表示要在后台执行的命令或进程,arg 表示命令或进程的参数,& 符号表示将命令或进程放到后台执行。

注意:nohup 命令的执行结果会输出到当前目录下的 nohup.out 文件中。如果要将命令或进程的输出重定向到其他文件中,可以使用重定向符号(>)指定输出文件的路径。例如:

nohup command [arg...] > output_file &

1-2-2、执行脚本文件

在执行 nohup 命令时,如果 command 是一个脚本文件,那么需要给该脚本文件添加可执行权限(chmod +x script.sh)。否则,会提示 “no such file or directory” 的错误。添加执行权限后执行nohup 命令

nohup sh filename.sh &

1-2-3、执行python文件

执行python文件: nohup 命令通常用于长时间运行的任务,例如在服务器上运行后台进程或者执行需要花费较长时间的脚本。在使用 nohup 命令时,建议将程序的输出重定向到一个日志文件中,以便后续查看程序的运行情况。

例如,要在后台执行一个 Python 脚本,并将输出重定向到一个日志文件中,可以使用以下命令:

nohup python my_script.py > my_script.log &

这将在后台执行 my_script.py 脚本,并将输出重定向到 my_script.log 文件中。如果当前终端会话已经关闭或者断开,my_script.py 仍将继续在后台运行,并将输出写入到 my_script.log 文件中。

1-2-4、拓展延申:在服务器上运行后台进程

拓展延申:nohup 命令的一个常见用途是在服务器上运行后台进程,例如 Web 服务器、数据库服务器等。在执行这些服务时,可以使用 nohup 命令将服务放到后台运行,并将输出重定向到日志文件中。

例如,在 Linux 系统上,要在后台启动一个 Apache Web 服务器,并将输出重定向到日志文件中,可以使用以下命令:

nohup /usr/local/apache2/bin/httpd -k start > /var/log/httpd.log &
这将在后台启动 Apache Web 服务器,并将输出重定向到 /var/log/httpd.log 文件中。

需要注意的是,nohup 命令并不是万能的,它不能保证被执行的命令或进程一定会一直运行。如果命令或进程本身存在问题或异常,仍然可能会被终止或崩溃。因此,在使用 nohup 命令时,仍需要对被执行的命令或进程进行监控和管理。

1-2-5、nohup和&的区别

&:是指在后台运行,当用户退出(挂起)的时候,命令自动跟着结束

nohup:不挂断的运行,注意并没有后台运行的功能,就是指用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行, 使用nohup后关闭了标准输入,终端不能再接受任何输入。

因此将nohup和&结合使用,就可以实现使命令永久地在后台执行的功能,结合使用后,终端可以接受任何输入。

二、进程查看

2-1、jobs命令(基本不用)

jobs命令:jobs命令用于查看当前会话中的后台任务。它只能显示当前终端中的后台进程,即与当前会话关联的进程。一些常用的jobs参数如下:

  • -l:列出进程ID以及任务状态
  • -n:仅列出状态发生变化的任务
  • -r:仅列出正在运行的任务
  • -s:仅列出已停止的任务

例如,使用jobs -l命令可以查看当前会话中的后台任务及其进程ID。

2-2、ps命令

ps命令:ps命令用于报告当前系统的进程状态。与jobs命令不同,ps可以显示所有用户的进程信息,而不仅仅是当前会话。一些常用的ps参数如下:

  • -A:显示所有进程
  • -u:按用户显示进程,显示进程的详细信息,包括用户、进程号、CPU 占用、内存占用等信息。
  • -x:显示无控制终端的进程
  • -e:显示环境变量
  • -aux: 显示所有进程的详细信息,包括用户、进程号、占用 CPU 和内存等信息。(一般直接使用aux就可以)

例如,使用ps -A命令可以查看系统中的所有进程。要查找特定进程,可以将输出通过管道传递给grep命令,如ps -A | grep my_script.sh。
在这里插入图片描述
在这里插入图片描述

2-3、top命令

top命令:top命令提供了一个实时动态的进程监视器。它可以查看系统中所有进程的实时状态,并根据资源占用对进程进行排序。在top界面中,你可以看到进程ID、用户、CPU占用、内存占用等信息。

要查找特定进程,可以在top界面中按u键,输入用户名以筛选该用户的进程。此外,你还可以按o键,然后输入筛选条件,如COMMAND=my_script.sh。按回车键确认,top将仅显示与条件匹配的进程。最后,按ctrl+c退出预览。
在这里插入图片描述

三、终止进程

3-1、进程终止概念介绍

进程终止指的是一个正在运行的进程结束其执行的过程。进程终止可以是正常的(例如,进程完成了它的任务,或者用户通过操作系统的接口请求终止进程),也可以是非正常的(例如,进程崩溃或遇到错误)。以下是关于进程终止的一些详细信息:

  • 正常终止:当一个进程完成了它的任务并且正常退出时,它会通知操作系统,操作系统会将进程标记为“已退出”。这时操作系统会释放进程所占用的内存、关闭与进程相关的文件等资源,并将进程的退出代码(一个整数值)返回给父进程。父进程可以通过读取这个退出代码来确定进程完成的状态。如果父进程没有及时调用wait()或waitpid()函数来获取退出状态,那么进程会成为“僵尸进程”,直到父进程获取到退出状态或者父进程本身终止。

  • 非正常终止:当一个进程遇到错误或者崩溃时,它可能会被操作系统强制终止。例如,如果进程发生了段错误(访问了未分配的内存),或者进程超过了允许的资源限制(如内存限制或时间限制),那么操作系统会终止这个进程并向其父进程报告错误信息。在这种情况下,父进程可以通过调用wait()或waitpid()函数来获取进程终止的状态。

  • 信号终止:操作系统可以向进程发送信号来终止进程。例如,如果用户在命令行中按下Ctrl+C,操作系统会向正在运行的进程发送SIGINT信号,告诉它终止执行。进程可以捕获这些信号并采取适当的措施,例如,保存进度并安全地终止执行。如果进程没有捕获这些信号,那么操作系统会默认终止进程,并向其父进程报告错误信息。

总之,进程终止是一个非常重要的概念,对于操作系统的稳定性和安全性具有至关重要的作用。了解进程终止的原因和机制,可以帮助我们更好地理解操作系统的工作原理,从而更好地开发和调试应用程序。

3-2、kill命令介绍

kill 命令用于终止指定的进程。常见的选项包括

  • -9:强制终止进程,相当于发送 SIGKILL 信号。
  • -15(默认选项):正常终止进程,相当于发送 SIGTERM 信号。

例如,要杀死进程号为 12345 的进程,可以使用以下命令:

# 使用top、ps等命令查看进程号
kill 12345

这将向进程号为 12345 的进程发送 SIGTERM 信号,使其正常终止。

如果进程无法正常终止,可以使用 -9 选项强制终止进程。例如:

kill -9 12345

这将向进程号为 12345 的进程发送 SIGKILL 信号,使其强制终止。

需要注意的是,杀死进程可能会导致未保存的数据丢失或其他不可预知的后果。在使用 kill 命令时,应该尽量避免误杀进程,确保只杀死必要的进程。


总结

知识点增加了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android进阶宝典—在Compose中跳转Fragment

使用场景 我们原有的项目中基本采用的是单Activity架构,页面之间的跳转都是通过Navigation进行的,举个简单的例子。 在这种单Activity架构模式下,有一天我们想把MainActivity或者BFragment使用Compose重构,这个时候我们就需要去…

PasteSpider软件优势介绍

PasteSpider采用.netcore编写,运行于linux服务器的docker/podman里面,涉及的技术或者工具有podman/docker,registry,nginx,top,ssh,git,svn等。 PasteSpider可以更好的为你执行服务的升级和维护工作。支持集群模式安装,也支持单例模式运行。…

如何为 Apple 官方 SwiftUI 示例中的图表元素加上首显动画?

0. 概览 在 Apple 官方教程示例 Animating Views and Transitions 中,苹果为我们展示了如何为 SwiftUI 中的各种视图添加动画和过渡效果。 在示例的最后,我们在完成 3 种不同数据类型(Elevation, Heart Rate, Pace)切换的同时,顺面收获了美美的图表元素动画效果: 不过,…

科研方向与个人思考

文章目录 关于科研选题与方法的若干思考如何选题选题tips确定研究问题之后如何读论文——与一篇优秀论文作者的博弈阅读论文的技巧代码实现过程中成果发表四步走:科技论文的书写顺序学会利用工具科研的正确姿势 研究生时间线个人思考入门一个领域的步骤(…

【有功-无功协调优化】基于改进多目标粒子群优化算法(小生境粒子群算法)的配电网有功-无功协调优化研究(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

Windows 安装 GDAL C++库

Windows 安装 GDAL C库1. 方法1:下载配置网友编译的GDAL版本1.1 下载1.2 配置1.3 测试1.4 缺点2. 方法2:自己编译3. 参考1. 方法1:下载配置网友编译的GDAL版本 1.1 下载 CSDN: GDAL,geos联合编译的库,版本为1.8.0&am…

VMware虚拟机搭建

网络步骤 VMWARE虚拟机NAT模式上网设置 VM虚拟机设置 虚拟机全局设置 启动虚拟机选择【虚拟网络编辑器】 如果需要管理员权限点【更改设置】,没有提示这忽略这一步 选择NAT模式,更改下面的子网IP,改成你需要的任何一个子网网段(…

KDZD608屏蔽服效率测试仪

一、产品概述 KDZD608型屏蔽服效率试验装置(带电作业用屏蔽服屏蔽效率试验装置)是对屏蔽服进效率试验的专用设备,广泛用于电力系统、生产厂家和科研单位不可缺少的检测设备。KDZD608型屏蔽服效率试验装置根据最新国家标GB6568.2-86《带电作业…

9.含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度

说明书 MATLAB代码:含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度 关键词:冰蓄冷空调 CCHP-MG 多时间尺度优化 冷热电联供 参考文档:《含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度》完全复现 仿真平台:MATLAB yal…

算法学习day57

算法学习day57 1.力扣647. 回文子串1.1 题目描述1.2分析1.3 代码 2.力扣 516.最长回文子序列2.1 题目描述2.2 分析2.3 代码 3.参考资料 1.力扣647. 回文子串 1.1 题目描述 题目描述: 给定一个字符串,计算这个字符串中有多少个回文子串。 具有不同开始…

TenserRT(一)模型部署简介

第一章:模型部署简介 — mmdeploy 0.12.0 文档 pytorch.onnx.export方法参数详解,以及onnxruntime-gpu推理性能测试_胖胖大海的博客-CSDN博客 我们来谈谈ONNX的日常 - Oldpan的个人博客 初识模型部署 训练:网络结构(深度学习框…

【Windows】更换笔记本键盘操作

目录 一、拆旧 1、电脑保持关机状态 2、拆下电池 3、拧开中间这块区域的螺丝 4、拿键盘进行对照,找到对应的固定键盘的螺丝的位置,拧开 5、直接撬起原本的键盘,注意不要扯到下面的排线,小心点 二、换新 6、换新键盘&#…

公司新招了个腾讯拿38K的人,让我见识到了什么才是测试天花板···

5年测试,应该是能达到资深测试的水准,即不仅能熟练地开发业务,而且还能熟悉项目开发,测试,调试和发布的流程,而且还应该能全面掌握数据库等方面的技能,如果技能再高些的话,甚至熟悉分…

ubuntu_修改libc.so.6 或者 libm.so.6的软链接导致sudo ls 等命令失效的解决方法

1. 背景 运行一个binary 应用程序, 提示报错: /lib/x86_64-linux-gnu/libm.so.6: version GLIBC_2.27 not found (required by 我的应用程序string 里一下符号标, 确实没有然后下载了一个 glibc-2.27, 安装到 usr/local/下, 并将 libm-2.27.so 和 libc-2.27.so 复制到 /lib/x8…

点云的处理

一、激光点云 激光点云指的是由三维激光雷达设备扫描得到的空间点的数据集,每一个点云都包含了三维坐标(XYZ)和激光反射强度(Intensity),其中强度信息会与目标物表面材质与粗糙度、激光入射角度、激光波长以…

基于imx8m plus开发板全体系开发教程3:Ubuntu 20.04 编译

前言: i.MX8M Plus 开发板是一款拥有 4 个 Cortex-A53 核心,运行频率 1.8GHz;1 个 Cortex-M7 核心,运行频率 800MHz;此外还集成了一个 2.3 TOPS 的 NPU,大大加速机器学习推理。 全文所使用的开发平台均为与NXP官方合作的FS-IMX8…

websorm启动vue项目修改内容后自动运行内存溢出

手动启动vue项目正常运行,修改部分内容保存后会自动重新run一下, 这个时候就报错内存溢出,然后很悲伤的需要再手动重启一下。 (在网上查了好多方法就不单独加链接了) 前3个方法都试过对于我的项目无效,第4…

017 - C++ 中的静态(static)

本期我们将讨论 C 中的 static(静态)。 static 关键字在 C 中有两个意思,这个取决于上下文。 简单了解 第一种情况是在类或结构体外部使用 static 关键字,另一种是在类或者结构体内部使用 static。 基本上我们可以这样理解&am…

背包问题基础与应用

背包问题 理论基础 01背包 背包中的每个物品只能用一次 物品编号重量价值物品1115物品2320物品3430 定义:dp[i][j]表示从下标0-i的物品中任取,放进容量为j的背包的最大价值 初始化: dp [[0] * (bag_size 1) for _ in range(len(weigh…

Java程序内存占用优化实践

目录背景堆内存调整内存还会继续上涨减少线程数量TomcatDubboLogback野线程背景 上了微服务的当,喜欢将服务各种拆分,公有云模式下服务器比较多,还能玩得转。到了私有化部署,有的客户连个技术人员都没有,只想一键启动…