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

目录

  • 前言
  • 一、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.kler.cn/a/9875.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Msray-Plus采集工具让您的市场营销更加简单,让您的营销成果更加显著

市场营销是现代企业不可或缺的一环,企业的发展和营销成果密不可分。然而,市场营销的过程中,需要大量的数据采集和整理工作,这对于营销人员来说是一项繁琐的工作,同时也是一项非常重要的工作。因为数据的准确性和完整性…

NumPy 秘籍中文第二版:十二、使用 NumPy 进行探索性和预测性数据分析

原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们涵盖以下秘籍: 探索气压探索日常气压范围研究年度气压平均值分析最大可见度用自回归模型预测气压使用移动平均模型预测气压研究年…

吐血奉献精心整理的一大波数据集

80开源数据集资源汇总(包含目标检测、医学影像、关键点检测、工业检测等方向) 数据集下载汇总链接:https://www.cvmart.net/dataSets数据集将会不断更新,欢迎大家持续关注! 小目标检测 AI-TOD航空图像数据集 数据集…

【消息队列】聊一下生产者消息发送流程

消息发送流程 1.生产者main线程调用send发送消息,先走拦截器,然后会将消息进行序列化,然后选择对应的分区器,将消息发送到RecordAccumulator中,默认是32m 2.Sender线程会异步读取,要不数据达到batch的大小 …

7nm舱泊一体SoC的新玩家

2016年,高通推出基于14纳米工艺的汽车座舱芯片骁龙820A,彼时,传统座舱SoC霸主NXP主推的是28纳米工艺的iMX8系列。不过,两款芯片都没有能够达到预期的量产效果。 真正的时代变革,来自于高通在2019年发布的全球首款量产7…

三大前端框架Vue, Angular, React

今天就来好好分析分析这三个框架。 背景介绍 Angular Angular 是 Google 在 2010 年发布的 AngularJS 的升级版,也称为 Angular 2。AngularJS 是由 Misko Hevery 和 Adam Abrons 在 2009 年创建的,最初被称为 "GetAngular",并于…

月薪过 3w 的 软件测试工程师 都是怎么做到的?

对任何职业而言,薪资始终都会是众多追求的重要部分。前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经基本饱和。 当然,我说的是最基础的功能测试的岗…

国网B接口调阅实时视频规范解读和代码示例分析

接口描述 国网B接口调阅实时视频,相关规范写的比较粗略: 调阅实时视频包括信令接口和媒体流接口,采用标准的SIP INVITESDP流程,媒体传输使用RTP/RTCP。 SDP 中 RTP Payload 的取值应遵守下面接口参数中的定义: a&a…

代码随想录_二叉树_leetcode236

leetcode 236. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、…

Java阶段一Day19

Java阶段一Day19 文章目录Java阶段一Day19对象流字符流WriterReader转换流缓冲字符流BufferedWriter与PrintWriterBufferedReader异常Throwable、Error、Exception异常处理机制throwthrowstry-catchfinally面试题教师总结新单词JAVA IO对象流对象输入流构造器方法例transient关…

多模态模型技术综述

多模态架构导语1. Image2Text1.1 图像数据集准备1.2 图像to文本的生成模型1.2.1 M2 模型(Meshed—Memory Transformer)Memory-Augmented EncoderMeshed Decoder2. text2Image2.1 生成对抗网络(GAN)2.1.1 文本生成图像基础GAN2.1.2…

第一章 webpack与构建发展简史

官方loader和插件 Loaders | webpack Plugins | webpack 为什么需要构建工具&#xff1f; 初识webpack webpack默认配置文件&#xff1a;webpack.config.js 可以通过webpack --config <config_file_name>指定配置文件 rules是个数组&#xff0c;一个打包配置可以有多…

Hive概论、架构和基本操作

Hive是一个构建在Hadoop上的数据仓库框架&#xff0c;最初&#xff0c;Hive是由Facebook开发&#xff0c;后台移交由Apache软件基金会开发&#xff0c;并做为一个Apache开源项目。 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据库表&a…

【数据库】面试题合集

1. 什么是索引?mysql 索引类型&#xff1f;索引是一种数据结构,可以帮助我们快速的进行数据的查找.1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引参考链接&#xff1a;https://www.cnblogs.com/luyucheng/p/6289714.html2. 索引是个什么样的数据结构呢?索引的数据结构…

【JS运算】分组求和/平均值(reduce函数)

对于数组求和的问题&#xff0c;使用reduce函数能够最快的解决 如果你还不会reduce函数&#xff0c;可以看这一篇&#xff1a; reduce函数的使用 思路 reduce函数对相同group的值进行迭代求和 将分组的总和除以组里的个数得到平均值&#xff0c;然后存储起来 Sum函数&#x…

2023 年 MQTT 协议的 7 个技术趋势|描绘物联网的未来

MQTT 是物联网消息传输标准协议&#xff0c;其采用极其轻量级的发布订阅消息模型&#xff0c;以可扩展、可靠且高效的方式连接物联网设备。 自 1999 年 IBM 发布 MQTT 以来已经过去了二十多年&#xff0c;而自 2012 年 EMQ 在 GitHub 上发布开源 MQTT 消息服务器 EMQX&#xf…

Python 小型项目大全 46~50

# 四十六、百万骰子投掷统计模拟器 原文&#xff1a;http://inventwithpython.com/bigbookpython/project46.html 当你掷出两个六面骰子时&#xff0c;有 17%的机会掷出 7。这比掷出 2 的几率好得多&#xff1a;只有 3%。这是因为只有一种掷骰子的组合给你 2&#xff08;当两个…

文件:IO流

1. 什么是IO /O 即输入Input/ 输出Output的缩写&#xff0c;其实就是计算机调度把各个存储中&#xff08;包括内存和外部存储&#xff09;的数据写入写出的过程&#xff1b;java中用“流&#xff08;stream&#xff09;”来抽象表示这么一个写入写出的功能&#xff0c;封装成一…

黑马2023JavaScript笔记

一、js知识点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…

鸿鹄工程项目管理系统源码 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…
最新文章