在本文中,我们将逐步了解流程,并简要介绍如何使用某些命令来管理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工具用于在系统上查看/列出运行的进程,这两个传统和众所周知的是ps和top命令:
ps命令
它显示有关系统中活动进程选择的信息,如下所示:
# ps # ps -e | head
列出Linux活动进程
2.顶部 - 系统监控工具
top是一个强大的工具 ,为您提供正在运行的系统的动态实时视图,如下面的屏幕截图所示:
# top
列出Linux运行进程
阅读更多顶级用法示例: 12 Linux中的TOP命令示例
3.扫视 - 系统监控工具
扫视是一种相对较新的具有高级功能的系统监控工具:
# glances
一览 - Linux进程监控
有关综合使用指南,请阅读: Glances - 用于Linux的高级实时系统监控工具
还有其他一些有用的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中杀死/终止活动进程,请打开以下链接:
请注意,当您的系统冻结时,您可以使用它们在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权限的系统用户可以通过nice和renice命令来影响这一点。
从顶部命令的输出,NI显示进程nice值:
$ top
列出Linux运行进程
使用nice命令为进程设置一个很好的值。 请记住,普通用户可以将一个漂亮的值从零归为20,以将它们拥有。
只有root用户可以使用负的nice值。
要放弃进程的优先级,请使用renice命令,如下所示:
$ renice +8 2687 $ renice +8 2103
看看我们关于如何管理和控制Linux进程的一些有用的文章。
- Linux进程管理:启动,关闭和之间的一切
- 在批处理模式下,通过“top”按内存使用查找前15个进程
- 通过Linux中最高内存和CPU使用情况查找最高运行进程
- 如何在Linux中使用PID编号查找进程名称
目前为止就这样了! 您有任何问题或其他想法,请通过以下反馈表与我们分享。