如何使用ps,kill,nice和killall在FreeBSD和OS X Unix操作系统中管理进程

时间:2020-01-09 10:40:50  来源:igfitidea点击:

如何在FreeBSD操作系统上管理进程?进程不过是FreeBSD或类Unix系统上的执行程序。系统上的每个进程都提供运行诸如vim或firefox之类的程序所需的资源。每个过程都有:

  • 唯一的过程标识符号(PID)
  • 虚拟地址空间
  • 安全上下文
  • 打开设备/句柄,可执行代码
  • 环境变量,优先级等。

在本快速教程中,我将介绍FreeBSD操作系统上的过程管理。

查看FreeBSD中正在运行的进程

ps或进程状态命令是列出进程活动的命令。
许多人使用top命令以交互方式列出进程,但是出于脚本目的,ps是用户友好的。
基本语法如下:

$ ps

使用ps命令列出进程

使用标志的示例:

$ ps -auxw

带标志的ps命令

其中:

  • a =显示有关其他用户进程以及您自己的进程的信息。
  • u =显示属于指定用户名的进程。
  • x =显示与其他选项匹配的进程时,请跳过所有没有控制终端的进程。这是默认行为。
  • w =使用132列显示信息,而不是默认的窗口大小。

如何使用top命令列出进程

找出FreeBSD上正在运行哪些进程的另一种最简单的方法是执行top命令:

$ top

要退出顶部命令,请执行(或点击)" q"并显示帮助,请点击" h"。

在FreeBSD上快速找到进程的PID

使用pgrep命令在正在运行的系统上搜索进程表,并打印与命令行上给定条件匹配的所有进程的进程ID(PID)。
语法为:

pgrep process
pgrep -u user process
pgrep firefox
pgrep -u www-data nginx

获取名为dhclient的进程的PID的快速方法是使用pgrep命令,执行:

$ pgrep dhclient

输出示例:

332

如何在FreeBSD Unix系统中发送过程信号

您可以将信号发送到FreeBSD中的所有进程。
例如,SIGTERM可以正常终止该进程。

通过PID发送过程信号

kill命令通过进程标识(PID)杀死进程。
请注意,用户必须具有足够的特权才能终止该进程。
基本语法如下:

$ kill <PID>
$ kill -s signalName <PID>

例如:

$ kill -s SIGTERM 454
$ kill -signalName <PID>
$ kill -SIGHUP 6765
$ kill -signalNumber <PID>
$ kill -9 868

要找到您的PID,请使用pgrep命令。
例如:

$ pgrep firefox

23872您可以从那里发出kill命令来杀死firefox进程:

$ kill 23872

您还可以发送多次击杀。

$ kill <PID> <PID> <PID>
$ kill 3455 79754 3454

如果要杀死而不清理,请使用-9信号:

$ kill -9 <PID>
$ kill -9 5858

列出信号

执行以下命令:

$ kill -l

一些更常用的信号和含义

----------+---------------------------------------------
  SIGNAL  |   NAME (Meaning)
----------+---------------------------------------------
     1    |   HUP (hang up)
     2    |   INT (interrupt)
     3    |   QUIT (quit)
     6    |   ABRT (abort)
     9    |   KILL (non-catchable, non-ignorable kill)
     14   |   ALRM (alarm clock)
     15   |   TERM (software termination signal)
-------------------------------------------------------

要按名称杀死进程,请使用killall命令

基本语法如下:

$ killall process
$ killall firefox
$ killall -SIGNAL process
$ killall -term firefox
$ killall -15 command
$ killall -15 firefox

杀死用户的过程:

$ killall -u <user> process
$ killall -u tom firefox

根据您的shell,您可能需要不同的标志或信号。
请查阅您的手册页(手册信号)。
这些示例是为了使您有所了解,而不是绝对的。
例如,在使用csh的笔记本电脑上,我无法使用命令killall进程。
我必须至少使用一个选项或参数来指定过程。
注意,还有一个pkill命令可以按名称杀死进程,但是由于它使用模式匹配而不是精确的进程名称,因此与killall相比,它具有潜在的危险。
这是一个危险的pkill命令的示例,该命令会杀死基于FreeBSD的服务器或台式机:

$ sudo pkill -v firefox

-v选项使匹配的意义相反。
显示不符合给定条件的过程。
有关更多信息,请参见pkill手册页。

如何调整流程优先级

nice命令以低优先级运行进程。

nice假定值为10。
优先级的值范围为-20至20。
默认优先级为0,优先级20为最低值。
负数用-表示。
如果您想将流程的优先级更改为更高的优先级,则需要成为root用户。
不同的shell是不同的,因此最好查阅您的精美手册页。
我主要使用csh。

nice命令在服务器或工作站上非常有用,在服务器或工作站上,多个进程需要的资源超出了CPU所能提供的资源。
与FreeBSD上较低优先级的进程相比,使用以下命令设置更多的CPU时间。

漂亮的命令用法示例

假设shell的优先级为0,则以优先级5执行命令日期。

$ nice -n 5 date

这是您需要成为超级用户或超级用户的示例:

# nice -16 nice --35 date

假设Shell的优先级为0,则以优先级-19执行命令date
我从来没有使用过此命令,因为在当今的系统中,我们具有如此高的RAM + CPU和强大的处理能力,因此这些问题就不会像初次引入时那样。

如何更改正在运行的进程的调度优先级

nice命令仅在开始新进程(即命令开始)时起作用。
使用renice命令来更改调度优先级运行进程。
语法为:

$ renice priority pid
$ renice -n increment pid
$ renice -u user pid

要更改进程ID 4242和344以及root拥有的所有进程的优先级,请执行:

$ sudo renice +1 -u root -p 344 4242

如何查看正在运行的进程的实时和空闲优先级

具有实时优先级的进程不会降低优先级,只会被具有相同或更高实时优先级的另一个进程抢占。
具有空闲优先级的进程仅在没有其他进程可运行时才运行,然后仅在其空闲优先级等于或大于所有其他可运行的空闲优先级进程时运行。
优先级是介于0和RTP_PRIO_MAX之间的整数(通常为31)。

0是最高优先级。
最低优先级为31。
要查看当前进程处于哪个实时优先级,只需执行以下命令:

$ rtprio

输出示例:

rtprio: normal priority

要查看过程715的哪个实时优先级:

$ rtprio 715

要将过程715的实时优先级更改为16,请执行:

# rtprio 16 -1423

要在不影响其他服务器使用的情况下运行backup.py脚本,请执行:

# idprio 31 /path/to/my/awesome/backup.py