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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 高效管理 Linux 进程:如何后台执行程序、查看进程、终止任务

前言


高效管理 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。


34374b5c2c874738b0617ad7188b82c4.png


1cf0853e0ae54ae48f1c2e31f4d6d37e.png


2-3、top命令


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


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


109275705e194d199c868777962bceac.png


三、终止进程


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 命令时,应该尽量避免误杀进程,确保只杀死必要的进程。


总结


知识点增加了!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
32 4
linux进程管理万字详解!!!
|
6天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
31 4
|
7天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
9天前
|
消息中间件 存储 Linux
|
15天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
16 1
|
27天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
【10月更文挑战第9天】本文将深入浅出地介绍Linux系统中的进程管理机制,包括进程的概念、状态、调度以及如何在Linux环境下进行进程控制。我们将通过直观的语言和生动的比喻,让读者轻松掌握这一核心概念。文章不仅适合初学者构建基础,也能帮助有经验的用户加深对进程管理的理解。
18 1
|
1月前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
27 0
Linux c/c++之IPC进程间通信
|
4月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
4月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
156 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
3月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。
下一篇
无影云桌面