关于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工作。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据