乐趣区

关于linux:Linux系列之进程管理

前言

过程是正在运行的程序,Linux 零碎通常有数百个过程同时运行。本文就来介绍下 Linux 是如何进行过程治理的。

咱们能够看到:

  • 查看过程(Viewing processes)
  • 查找过程(Finding processes)
  • 治理过程(Managing processes)
  • 过程的优先级(Prioritizing processes)
  • 杀死过程(Killing processes)
  • 在后盾运行过程(Running processes in the background)
  • 调度过程(Scheduling processes)

查看过程

ps

Linux 内核在创立过程时,会按程序给每个过程调配一个惟一的过程 ID(PID)。一般来说,在过程上执行任何操作,咱们必须指定 PID,有时咱们能够应用名称。

ps命令是查看过程的次要工具。不应用任何选项来运行该命令,会列出以后登录用户所启动(调用)的过程,以及终端上正在运行的过程。

如果咱们增加了 aux 选项:

  • a = 显示所有用户的过程
  • u = 显示过程的用户 / 所有者
  • x = 显示未连贯到终端的过程

过程依照它们被启动的程序进行展现,因而你会看到列表是依据 PID 进行排序的。

让咱们简略来看看上面几列的信息:

  • USER:调用过程的用户。
  • PID:过程的 ID。
  • %CPU:过程占用 CPU 的百分比。
  • %MEM:过程占用内存的百分比。
  • COMMAND:启动过程的命令。

查找命令

grep

咱们能够应用 grep 命令来查找指定的过程,假如咱们想要查找所有名称中蕴含 mfsconsole 的过程。

ps aux | grep msfconsole

top

咱们能够应用 top 命令来动静地列举出,依照资源应用状况排序的过程,从最大的开始列举。默认状况下,该列表将每 3 秒刷新一次。

top

治理过程

优先级

内核对过程的优先级有最终决定权,然而咱们能够应用 nice 命令,来倡议应该晋升过程的优先级。nice命令的值范畴是从 -20(最有可能失去优先权)到 +19(最不可能失去优先权)。

较高的 nice 值转换为低优先级,较低的 nice 值转换为高优先级。

当一个过程启动后,所有的规范过程都以 nice 值 0 来进行启动。

咱们能够应用 nice 命令来设置一个过程启动时的 nice 值,咱们能够应用 renice 来调整一个运行中的过程的 nice 值。

当咱们应用 nice 命令启动一个过程但没有提供任何值时,默认的 nice 值是 10。

nice命令要求你递增 nice 值,renice命令想要一个相对的 nice 值。

设置优先级

咱们能够应用 nice 命令来调整一个程序的 nice 值。这容许咱们进步或升高内核提供给该过程的优先级,绝对于其余过程而言。

在右边,我执行 watch -n1 free 来展现零碎内存应用状况的细节。在左边,我让top 命令运行,你能够看到 watch 命令的 PID 是 9717,nice的值为 0。

让咱们继续执行 watch 命令,只不过这次是用 nice 命令。

nice -15 watch -n1 free

当初咱们能够看到 watchnice值为 15。这里要牢记的几件事:

  • 这个 watch 命令的 PID 与之前的 watch 命令不同。这是因为 nice 会启动一个新的过程,而不是更改一个现有的过程。
  • nice命令前面的 -15 意味着15。如果咱们想要指定一个正数(高优先级),咱们能够应用双中划线-
  • 上面是执行 sudo nice --10 watch -n1 free 后的样子。是的,如果你要进步优先级,你必须应用 sudo。任何人都能够升高优先级,但只有sudo 能够进步优先级。

扭转优先级

renice命令接管 -2019的绝对值,并接管过程的PID

让咱们再次运行 watch 命令。

watch -n1 free

让咱们来查看下 nice 值,既然咱们没有指定 nice 值,它应该为 0。比起应用 top,这里我将会应用psgrep,用以简化输入。

咱们能够看到,第八列的值为 0,该值为 nice 的值,PID的值位于第三列。让咱们应用 renice 试试:

sudo renice -15 14318

咱们能够看到,当初 nice 的值是 -15。咱们也能够应用 top 工具来扭转 nice 值。

top 中,按下 R 键,并提供一个PID

按下回车键,并提供一个新的 nice 值:

top胜利的扭转了 nice 值:

杀死过程

kill

你能够通过 kill 命令来进行一个有问题的过程。kill命令有 64 种不同的 kill 信号,以及语法是kill -signal PID。如果没有显示的提供信号位,将会默认为SIGTERM。这里我将重点介绍以下几种:

信号名称 数值 形容
SIGHUP 1 挂断(HUP)信号。它进行指定的过程,并以雷同的 PID 重新启动它。
SIGINIT 2 中断(INT)信号。这是一个强劲的 kill 信号,不保障能起作用,但的确有这样的状况。
SIGQUIT 3 外围转储。终止过程并将过程信息保留在内存中,而后它将这些信息保留在当前工作目录下一个名为 core 的文件中。
SIGTERM 15 终止(TERM)信号。它是 kill 命令的默认 kill 信号。
SIGKILL 9 这是一个相对的 kill 信号。它通过将过程的资源发送到一个非凡的设施 /dev/null 来迫使过程进行。

上面的命令会通过 HUP 信号来重启咱们的 watch 命令。

kill -1 14318

上面的命令会确保过程被终止。

kill -9 16318

如果咱们不晓得 PID,咱们能够应用killall 命令,它接管过程的名称。

killall -9 watch

在后盾运行过程

&

当你执行一个命令时,shell会进行期待,直到命令实现后才提供另一个命令提醒。咱们能够在后盾运行一个过程,它将持续运行而不须要终端,把终端腾出来做其余工作。咱们在命令的开端增加 & 来做到这一点。

geany sample.txt &

geany不再占用整个终端。

fg

咱们如何让它回到前台?能够应用带有 PID 的 fg 命令。

fg 18345

bg

你也能够应用 bg 命令来挪动一个过程到后盾。

bg 18345

调度过程

在 Linux 中,咱们能够应用 atcrond来调度过程。crond有点简单,这里重点介绍at

at

at命令对于安顿一项工作在将来某个工夫点运行一次很有用。它设置了 atd 守护过程。守护过程是一个位于后盾的程序,在没有任何用户界面的状况下做本人的事件。

上面是 at 命令执行过程的工夫的语法,工夫能够以多种格局提供。

工夫格局 含意
at 7:20pm Run at 7:20 PM of current day.
at 7:20pm June 25 Run at 7:20 PM on June 25
at now + 20 minutes Run in 20 minutes
at 7:25pm 06/10/2021 Run at 7:25 pm on June 10, 2021
at noon

咱们能够看到,at将咱们带入了交互模式,在这里咱们输出了咱们心愿在指定工夫执行的命令。实现后按下 CTRL+D。

atq

应用 atq 来列举出所有预约的 at 工作。

退出移动版