linux中的进程是什么?

理解进程和作业是掌握Linux的一个关键方面。这是你需要知道的。...

对于没有计算机科学背景的人来说,过程这个词通常是陌生的。然而,在讨论Linux编程时经常使用它,进程对于系统管理工作是必不可少的。

A grid of yellow sticky notes with a hand removing the lower right note

Linux也使用job这个术语来指代一个非常相似的概念。两者之间的区别很细微,但很重要,作业控制是运行多任务环境时的有用工具。您可以使用许多工具和内置命令来处理作业。

什么是过程(a process)?

在最简单的层次上,您可以将一个进程看作是您运行的程序的等价物。它可能是一个成熟的GUI应用程序,比如web浏览器。它可以是在命令行上运行的单个一次性命令,例如ls。广义地说,在你的计算机上发生的任何事情都取决于一个进程,在它的核心。

实际上,单个应用程序可以利用多个进程同时执行不同的任务。使用管道的命令行调用,例如:

$ grep "error" log.txt | wc -l

将执行两个单独的进程,每个管段一个。

流程如何开始

进程可以由用户显式创建,也可以由计算机本身自动创建。事实上,一旦启动,可能已经有数百个进程在运行。

进程可以派生其他进程,而init是在许多传统Linux系统上启动的第一个进程,它最终负责启动所有运行的进程。

流程如何结束

许多进程都是执行任务然后停止的短暂命令。在终端中键入ls将在几秒钟内启动、执行和停止进程。

某些进程(如守护进程)连续运行。例如,cron进程在其主机运行时定期执行其他命令。

识别流程

操作系统(OS)为每个进程分配一个唯一的标识符。它被称为PID或进程ID。这个值通常是一个1-5位数字,将来的进程可以重用已经完全清理的以前进程的PID。

操作系统本身以许多不同的方式使用PID。一个很好的例子是/proc目录,它存储有关当前正在运行的进程的信息。

相关:Linux根目录中的那些文件夹是什么?

什么是工作(a job)?

在Linux术语中,作业是由shell管理的程序。它通常由一个进程组成,但可能使用多个进程。在终端中输入命令时,将生成一个进程来执行该命令,并创建一个作业来帮助在命令运行时控制该命令。

管理作业

如果正在前台运行作业,可以按Control+C(^C)来中断它。通常,这将导致进程退出并将终端返回到提示。

$ sleep 100^C$

或者,按Control+Z(^Z)将停止作业的运行,但不会导致作业结束。你可以把它想象成一个停顿。

$ sleep 100^Z[1]+ Stopped sleep 100$

请注意,shell在停止作业时会在方括号中告诉您作业的编号。这可以与其他命令一起使用来控**业。例如,可以通过使用fg将作业带到前台来重新启动作业:

$ fg %1sleep 100

您可以使用类似的命令在后台重新启动作业:

$ bg %1[1]+ sleep 100 &$

这将使控件返回到提示,以便您可以在作业运行时继续执行其他工作。如果希望作业一启动就在后台运行,请在命令末尾添加一个(&T):

$ sleep 100 &[1] 61087$

在本例中,shell打印括号中的作业编号,然后打印PID。

查询进程和作业的常用工具

监测过程

获取进程信息最有用的命令之一是top。该程序显示运行进程的实时交互式视图。它是与图形程序(如GNOME的系统监视器或Windows任务管理器)等效的命令行。

您可以使用简单的命令top:

A screenshot of a terminal showing the top command running on Linux

标题区域显示CPU负载和内存使用情况。下面,top显示了一个表,每行包含一个进程。详细信息包括PID、进程正在使用的可用CPU功率以及它所消耗的CPU总时间。信息会自动刷新,默认情况下每三秒刷新一次。

有许多选项和交互式命令可以用来改变top的行为。使用man-top命令阅读更多:

A screenshot of a terminal showing the manpage for the Linux top command

获取活动进程的快照

ps命令是进程状态的缩写,列出进程。不同的选项允许对显示的详细信息进行各种过滤和调整。默认情况下,ps显示附加到终端并由当前用户启动的进程。换句话说,大多数命令都是您在命令行中键入的。

在前面的任务仍处于后台的情况下,输出可能看起来有点像这样:

$ psPID TTY TIME CMD35564 ttys000 0:00.00 sleep 10073998 ttys000 0:00.43 -bash

与top一样,ps有许多控制其行为的选项,这些选项可以通过man ps发现:

A screenshot of a terminal showing the manpage for the Linux ps command

最有用的两个经常组合在一起的是-e和-f。它们分别显示所有用户拥有的进程和附加列。例如:

$ ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 2020 ? 00:11:22 /**in/initroot 2 0 0 2020 ? 00:00:00 [kthreadd]...

列出后台作业

jobs命令列出当前shell中的后台作业。要演示其用法,请在后台启动一个长时间运行的作业:

$ du -skh ~ >/tmp/du.txt 2>/dev/null &[1] 61167

此命令计算主目录使用的总磁盘空间,将其输出重定向到临时文件。

$ jobs[1]+ Running du -skh ~ > /tmp/du.txt 2> /dev/null &

最终,当作业完成时,终端中将出现一行,类似于:

[1]+ Exit 1 du -skh ~ > /tmp/du.txt 2> /dev/null

发送信号终止进程

如果你发现了一个行为不端的过程,你可能需要终止它。尽管听起来很激烈,kill命令是系统管理员工具箱中的一个正常部分。它可以发送几个信号中的任意一个,这些信号是控制流程行为的标准通知。要发送的一些常见信号是SIGINT、SIGTSTP、SIGTERM和SIGKILL。

SIGINT相当于按^C。SIGTSTP相当于按^Z。SIGTERM和SIGKILL都是停止进程的方法。前者向进程发送一个请求,给它一个优雅地关闭自己的机会。后者是一种更极端的方法,用于强制流程退出,应作为最后手段。

kill命令也可以用于作业。例如:

$ jobs[1]+ Running sleep 100 &$ kill %1[1]+ Terminated: 15 sleep 100

阅读更多:杀死Linux中无响应程序的方法

在linux中使用进程和作业

流程和作业是很难把握的概念,尤其是它们之间的区别。然而,它们是理解Linux下系统管理的第一步。作业是同时从shell运行不同命令的一种实用方法。

进程是一个较低层次的概念,它也可以**纵,是计算机上运行的每个程序的核心。

  • 发表于 2021-03-27 02:21
  • 阅读 ( 234 )
  • 分类:IT

你可能感兴趣的文章

什么是容器linux?您应该使用它吗?

...因此,它们作为一个单元或系统而不是多个。此外,群集中的计算机具有执行相同功能的节点或服务器。因此,节点是一台机器,而集群是一组协同工作的服务器。 ...

  • 发布于 2021-03-15 05:37
  • 阅读 ( 206 )

如何控制linux启动服务和守护进程

...动进程。 这个启动过程依次负责启动系统中的所有其他进程。这包括服务器应用程序(包括将出现漂亮桌面登录的X服务器进程)、所谓的“守护程序”(在后台等待特定事件的程序,如CUPS打印守护程序)和其他...

  • 发布于 2021-03-15 11:22
  • 阅读 ( 213 )

linux中杀死无响应程序的7种方法

...inux中遇到应用程序的问题,这里有几种方法可以杀死Linux中的程序。 ...

  • 发布于 2021-03-18 00:56
  • 阅读 ( 361 )

linux命令参考备忘单

...我们准备了这个方便的Linux命令备忘单。如果您想运行其中的几个,请查看如何在带屏幕的Linux终端上执行多任务。 ...

  • 发布于 2021-03-22 04:06
  • 阅读 ( 229 )

没有systemd的最佳linux发行版

...?我们来看看。 系统D:快速回顾 在历史上,Linux系统中的启动序列是systemv Unix(SysV)引入的初始化系统的副本。SysV init系统遵循Unix原理。当人们提到Unix哲学时,他们通常会把它简化为众所周知的“做一件事,把它做好”这...

  • 发布于 2021-03-31 14:20
  • 阅读 ( 187 )

如何在linux上杀死僵尸进程

...和守护进程。其中一种方法是维护进程表。这是内核内存中的结构列表。每个进程在此列表中都有一个条目,其中包含有关它的一些信息。 每个进程表结构中都没有太多内容。它们包含进程ID、一些其他数据项和指向该进程的进...

  • 发布于 2021-04-01 07:47
  • 阅读 ( 233 )

为什么linux的systemd在这么多年后仍然存在分歧

...和服务、日志记录和日志记录,以及许多其他已经由Linux中的专用模块处理的功能。其中大部分与系统初始化无关。 systemd提供的一些守护程序包括: systemd udevd:管理物理设备。 systemd logind:管理用户登录。 systemd resolved:为本...

  • 发布于 2021-04-02 02:56
  • 阅读 ( 176 )

如何在linux上删除用户(并删除所有跟踪)

...进程和其他清理任务,请按照下面“删除用户帐户”部分中的步骤进行操作。在基于Debian的发行版上需要deluser命令,在其他Linux发行版上需要userdel命令。 linux上的用户帐户 自从第一个分时系统在20世纪60年代初出现并带来了让...

  • 发布于 2021-04-02 15:16
  • 阅读 ( 173 )

如何在linux上使用tail命令

...令显示文件末尾的数据。它甚至可以实时显示添加到文件中的更新。我们教你如何使用它。 他杀了尾巴吗? tail命令显示文件末尾的数据。通常,新数据会添加到文件的末尾,因此tail命令是查看文件中最新添加内容的一种快速...

  • 发布于 2021-04-02 17:32
  • 阅读 ( 180 )

如何在linux上使用free命令

...算机上,您可以拉伸终端窗口。下面是一个更整洁的表格中的输出: total used free shared buff/cache available
 Mem: 2038576 670716 327956 14296 1039904 1187160
 Swap: 1557568 769096 788472 这些数字以kibibytes表示,即1024字节。在M...

  • 发布于 2021-04-02 19:12
  • 阅读 ( 175 )
echospicy
echospicy

0 篇文章

相关推荐