所有您需要了解Linux中的进程[综合指南]

在本文中,我们将逐步了解流程,并简要介绍如何使用某些命令来管理Linux中的进程

进程是指正在执行的程序; 它是一个程序的运行实例。 它由程序指令,从文件读取的数据,其他程序或系统用户的输入组成。

流程类型

在Linux中基本上有两种类型的进程:

  • 前台进程 (也称为交互式进程) - 通过终端会话初始化和控制。 换句话说,必须有一个用户连接到系统才能开始这样的过程; 它们没有作为系统功能/服务的一部分自动启动。
  • 后台进程 (也称为非交互式/自动进程)是未连接到终端的进程; 他们不期望任何用户输入。

什么是守护进程

这些是从系统启动开始并永久运行的特殊类型的后台进程作为服务; 他们不死 它们作为系统任务(作为服务运行)自发启动。 但是,它们可以由用户通过init进程控制。

Linux进程状态

在Linux中创建进程

通常,当现有进程在内存中将其自身精确复制时,通常会创建一个新进程。 子进程将具有与其父进程相同的环境,但只有进程号不同。

在Linux中创建新进程有两种常规方式:

  • 使用System()函数 - 这个方法比较简单,但是效率低下,并且具有明显的一定的安全隐患。
  • 使用fork()和exec()函数 - 这种技术有点先进,但提供更大的灵活性,速度以及安全性。

Linux如何识别进程?

因为Linux是一个多用户系统,意味着不同的用户可以在系统上运行各种程序,每个运行的程序实例必须由内核唯一标识。

并且程序通过其进程ID( PID )以及它的父进程ID( PPID )来识别,因此进程可以进一步分为:

  • 父进程 - 这些是在运行时创建其他进程的进程。
  • 子进程 - 这些进程在运行时由其他进程创建。

初始化过程

Init进程是系统上所有进程的母(母),它是Linux系统启动时执行的第一个程序; 它管理系统上的所有其他进程。 它由内核本身启动,因此原则上它没有父进程。

init进程始终具有进程ID为1 它作为所有孤儿进程的收养父母。

您可以使用pidof命令查找进程的ID:

# pidof systemd
# pidof top
# pidof httpd

查找Linux进程ID

要查找当前shell的进程ID和父进程ID,请运行:

$ echo $$
$ echo $PPID

查找Linux父进程ID

在Linux中启动一个进程

一旦运行了命令或程序(例如cloudcmd - CloudCommander),它将在系统中启动一个进程。 您可以启动前台(交互)过程,如下所示,它将连接到终端,用户可以发送输入:

# cloudcmd

启动Linux交互过程

Linux背景工作

要在后台启动一个进程(非交互式),请使用&符号,这里,该进程在用户移动到前台之前不会读取用户的输入。

# cloudcmd &
# jobs

在后台启动Linux进程

您还可以通过使用[Ctrl + Z]挂起来将进程发送到后台,这将向进程发送SIGSTOP信号,从而停止其操作; 它变得闲置

# tar -cf backup.tar /backups/*  #press Ctrl+Z
# jobs

要在后台继续运行上述挂起的命令,请使用bg命令:

# bg

要将后台进程发送到前台,请使用fg命令以及作业ID,如下所示:

# jobs
# fg %1

Linux后台进程作业

您可能还喜欢: 如何在后台启动Linux命令并在终端中分离进程

Linux中的进程状态

在执行过程中,一个进程根据其环境/情况从一个状态变为另一个状态。 在Linux中,一个进程具有以下可能的状态:

  • 运行 - 这里正在运行(它是系统中的当前进程),或者它已准备好运行(它正在等待分配给其中一个CPU)。
  • 等待 - 在这种状态下,进程正在等待事件发生或系统资源。 此外,内核还区分了两种类型的等待进程; 可中断等待进程 - 可以被信号和不间断等待进程中断 - 直接等待硬件条件,不能被任何事件/信号中断。
  • 停止 - 在这种状态下,一个进程已经停止,通常通过接收一个信号。 例如,正在调试的进程。
  • 僵尸 - 在这里,一个进程已经死了,它已经停止了,但它仍然有一个任务在系统上执行。

如何在Linux中查看活动进程

有几个Linux工具用于在系统上查看/列出运行的进程,这两个传统和众所周知的是pstop命令:

ps命令

它显示有关系统中活动进程选择的信息,如下所示:

# ps 
# ps -e | head 

列出Linux活动进程

2.顶部 - 系统监控工具

top是一个强大的工具 ,为您提供正在运行的系统动态实时视图,如下面的屏幕截图所示:

# top 

列出Linux运行进程

阅读更多顶级用法示例: 12 Linux中的TOP命令示例

3.扫视 - 系统监控工具

扫视是一种相对较新的具有高级功能的系统监控工具:

# glances

一览 - Linux进程监控

有关综合使用指南,请阅读: Glances - 用于Linux的高级实时系统监控工具

还有其他一些有用的Linux系统监视工具可用于列出活动进程,打开下面的链接了解更多关于它们:

  1. 20个用于监视Linux性能的命令行工具
  2. 13更有用的Linux监控工具

如何在Linux中控制进程

Linux还有一些控制进程的命令,例如kill,pkill,pgrep和killall,下面是一些如何使用它们的基本示例:

$ pgrep -u youcl top
$ kill 2308
$ pgrep -u youcl top
$ pgrep -u youcl glances
$ pkill glances
$ pgrep -u youcl glances

控制Linux进程

要了解如何深入使用这些命令,在Linux中杀死/终止活动进程,请打开以下链接:

  1. 杀死,杀死和杀死命令终止Linux进程的指南
  2. 如何在Linux中查找和杀死运行进程

请注意,当您的系统冻结时,您可以使用它们在Linux中杀死响应的应用程序。

发送信号到进程

在Linux中控制进程的基本方法是向他们发送信号。 有多个信号可以发送到进程,查看所有运行的信号:

$ kill -l

列出所有Linux信号

要向进程发送信号,请使用我们前面提到的kill,pkill或pgrep命令。 但程序只能对信号进行编程才能识别这些信号。

大部分信号供系统内部使用,也可供编程人员编写代码时使用。 以下是对系统用户有用的信号:

  • SIGHUP 1 - 当其控制终端关闭时发送到进程。
  • SIGINT 2 - 当用户按[Ctrl+C]中断进程时,由控制终端发送到进程。
  • SIGQUIT 3 - 如果用户发送退出信号[Ctrl+D]则发送到进程。
  • SIGKILL 9 - 此信号立即终止(杀死)进程,该进程将不执行任何清理操作。
  • SIGTERM 15 - 这是一个程序终止信号(kill将默认发送)。
  • SIGTSTP 20 - 由其控制终端发送到进程,要求其停止(终止); 由用户按[Ctrl+Z]启动。

以下是杀死命令的示例,一旦冻结Firefox即可使用其PID来杀死Firefox应用程序:

$ pidof firefox
$ kill 9 2687
OR
$ kill -KILL 2687
OR
$ kill -SIGKILL 2687  

要使用其名称杀死应用程序,请使用pkill或killall:

$ pkill firefox
$ killall firefox 

改变Linux进程优先级

在Linux系统上,所有活动进程都具有优先级和一定的好价值。 具有较高优先级的进程通常会比较低优先级的进程获得更多的CPU时间。

但是,具有root权限的系统用户可以通过nicerenice命令来影响这一点。

从顶部命令的输出,NI显示进程nice值:

$ top  

列出Linux运行进程

使用nice命令为进程设置一个很好的值。 请记住,普通用户可以将一个漂亮的值从零归为20,以将它们拥有。
只有root用户可以使用负的nice值。

放弃进程的优先级,请使用renice命令,如下所示:

$ renice +8  2687
$ renice +8  2103

看看我们关于如何管理和控制Linux进程的一些有用的文章。

  1. Linux进程管理:启动,关闭和之间的一切
  2. 在批处理模式下,通过“top”按内存使用查找前15个进程
  3. 通过Linux中最高内存和CPU使用情况查找最高运行进程
  4. 如何在Linux中使用PID编号查找进程名称

目前为止就这样了! 您有任何问题或其他想法,请通过以下反馈表与我们分享。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏