Linux 进程管理

在本教程中,你将学习 -

  • 什么是进程?
  • 运行前台进程
  • 运行后台进程
  • Fg
  • Top
    • PS
    • Kill
    • NICE
    • DF
    • Free

什么是进程?

程序的实例称为进程 Process。简单来说,你为 Linux 机器提供的任何命令都会启动一个新进程。

可以为同一程序提供多个进程。

进程类型:

  • 前台进程:它们在屏幕上运行,需要用户输入。例如 Office 程序
  • 后台进程:它们在后台运行,通常不需要用户输入。例如防病毒软件。

运行前台进程

要启动前台进程,你可以从桌面运行它,也可以从终端运行它。

使用终端时,你必须等待,直到前台进程开始运行。

运行后台进程

如果从终端启动前台程序/进程,直到程序启动并运行否则你无法在终端上工作,。

特别是,数据密集型任务需要大量处理能力,甚至可能需要数小时才能完成。你当然不希望你的终端被搁置这么长时间。

为了避免这种情况,你可以运行程序并将其发送到后台,以便终端可供你使用。让我们学习如何做到这一点,

guru99@VirtualBox:-$ banshee 
[Info 16:08:36.688] Running Banshee 2.2.1: [Ubuntu 11. 11-12-19 14:51:26 UTC] 
^Z 
[1]+ Stopped
guru99@VirtualBox:-$ bg

  1. 输入进程后,再按Ctrl + Z

  2. 输入 bg 后将进程发送到后台。

fg

你可以使用命令 fg 继续已停止的程序并将其置于前台。

该实用程序的简单语法是:

fg jobname

例如,

  1. 推出 banshee 音乐播放器
  2. 使用Ctrl + Z命令停止它
  3. 使用 fg 继续进程。
home@virtualBox:-$ banshee 
^Z 
[1]+ Stopped	banshee 
home@virtualBox:-$ fg banshee 
banshee 
[Info 00:36:19.400] Running Banshee 2.2.0: [Ubuntu oneiric (linux-gnu, 1686) @ 2011-09-23 04:51:00 UTC]

让我们继续看看管理进程的其他重要命令 -

top

该命令告诉用户 Linux 机器上的所有正在运行的进程。

dishan@vultr:~$ top
top - 15:59:16 up 2 days,  7:16,  2 users,  load average: 0.00, 0.00, 0.00
Tasks:  83 total,   1 running,  47 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   492952 total,    89836 free,    91336 used,   311780 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   384792 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0  225380   7360   4904 S  0.0  1.5   0:08.69 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
    4 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 kworker/0:0H
    6 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 mm_percpu_wq
    7 root      20   0       0      0      0 S  0.0  0.0   0:00.82 ksoftirqd/0
    8 root      20   0       0      0      0 I  0.0  0.0   0:01.11 rcu_sched
    9 root      20   0       0      0      0 I  0.0  0.0   0:00.00 rcu_bh
   10 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.70 watchdog/0
   12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 cpuhp/0
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   14 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 netns
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_tasks_kthre
   16 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kauditd
   17 root      20   0       0      0      0 S  0.0  0.0   0:00.18 khungtaskd
   18 root      20   0       0      0      0 S  0.0  0.0   0:00.00 oom_reaper
   19 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 writeback
   20 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kcompactd0
   21 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd
   22 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 crypto
   23 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 kintegrityd
   24 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 kblockd
   25 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 ata_sff
   26 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 md
   27 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 edac-poller
   28 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 devfreq_wq
   29 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 watchdogd
   33 root      20   0       0      0      0 S  0.0  0.0   0:02.01 kswapd0
   34 root      20   0       0      0      0 S  0.0  0.0   0:00.00 ecryptfs-kthrea
   76 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 kthrotld
   77 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 acpi_thermal_pm

按键盘上的q跳出进程显示。

术语如下:

描述 例 1 例 2
PID 每个任务的进程 ID 1525 961
User 任务所有者的用户名
PR 优先级可以是 20(最高)或-20(最低) 20 20
NI 任务的好价值 0 0
VIRT 使用的虚拟内存(kb) 1775 75972
RES 使用的物理内存(kb) 100 51
SHR 共享内存使用(kb) 28 7952
S 状态有五种类型:’D’=不间断的睡眠’R’=正在运行’S’=睡觉’T’=追踪或停止’Z’=僵尸 小号 [R
%CPU CPU 时间的百分比 1.7 1.0
%MEM 使用的物理内存 10 5.1
TIME+ 总 CPU 时间 5:05.34 2:23.42
Command 命令名称 Photoshop.exe Xorg 的

ps

此命令代表 process status。当我们使用Ctrl + Alt + Del时,它类似于 Windows 机器中弹出的任务管理器。此命令类似于 top 命令,但显示的信息不同。

要检查在用户下运行的所有进程,请使用命令 -

ps ux

实际应用的例子如下,

dishan@vultr:~$ ps ux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
dishan    5107  0.0  1.1 112152  5480 ?        S    15:36   0:00 sshd: dishan@pt
dishan    5108  0.0  1.0  22972  5028 pts/0    Ss+  15:36   0:00 -bash
dishan    5313  0.0  1.1 112152  5464 ?        S    17:17   0:00 sshd: dishan@pt
dishan    5314  0.6  0.9  22972  4676 pts/1    Ss   17:17   0:00 -bash
dishan    5324  0.0  0.6  37664  3224 pts/1    R+   17:17   0:00 ps ux
dishan   14312  0.0  0.8  76592  4324 ?        Ss   Sep13   0:00 /lib/systemd/sy
dishan   14313  0.0  0.5 263452  2480 ?        S    Sep13   0:00 (sd-pam)
dishan   14323  0.0  1.0  23104  5200 tty1     S    Sep13   0:00 -bash
dishan   14468  0.0  0.8  24564  4392 tty1     S+   Sep13   0:00 nano CrawlSourc

你还可以检查单个进程的进程状态,使用语法 -

ps PID 

比如,

dishan@vultr:~$ ps 5108
  PID TTY      STAT   TIME COMMAND
 5108 pts/0    Ss+    0:00 -bash

kill

此命令终止 Linux 机器上的运行进程。

要使用这些实用程序,你需要知道要杀死的进程的 PID(进程 ID)

语法

kill PID

要查找进程的 PID,只需键入

pidof Process name

让我们试一试。

dishan@vultr:~$ ps ux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
dishan    5107  0.0  1.1 112152  5480 ?        S    15:36   0:00 sshd: dishan@pt
dishan    5108  0.0  1.0  22972  5028 pts/0    Ss+  15:36   0:00 -bash
dishan    5313  0.0  1.1 112152  5464 ?        S    17:17   0:00 sshd: dishan@pt
dishan    5314  0.6  0.9  22972  4676 pts/1    Ss   17:17   0:00 -bash
dishan    5324  0.0  0.6  37664  3224 pts/1    R+   17:17   0:00 ps ux
dishan   14312  0.0  0.8  76592  4324 ?        Ss   Sep13   0:00 /lib/systemd/sy
dishan   14313  0.0  0.5 263452  2480 ?        S    Sep13   0:00 (sd-pam)
dishan   14323  0.0  1.0  23104  5200 tty1     S    Sep13   0:00 -bash
dishan   14468  0.0  0.8  24564  4392 tty1     S+   Sep13   0:00 nano CrawlSourc
dishan@vultr:~$ kill 14468
dishan@vultr:~$ ps ux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
dishan    5107  0.0  1.1 112152  5480 ?        S    15:36   0:00 sshd: dishan@pts/0
dishan    5108  0.0  1.0  22972  5028 pts/0    Ss+  15:36   0:00 -bash
dishan    5313  0.0  1.1 112152  5464 ?        S    17:17   0:00 sshd: dishan@pts/1
dishan    5314  0.0  0.9  22972  4852 pts/1    Ss   17:17   0:00 -bash
dishan    5326  0.0  0.6  37664  3140 pts/1    R+   17:20   0:00 ps ux
dishan   14312  0.0  0.8  76592  4324 ?        Ss   Sep13   0:00 /lib/systemd/systemd --user
dishan   14313  0.0  0.5 263452  2480 ?        S    Sep13   0:00 (sd-pam)
dishan   14323  0.0  1.0  23104  5200 tty1     S+   Sep13   0:00 -bash

nice

Linux 可以同时运行大量进程,这可能会降低某些高优先级进程的速度并导致性能低下。

为避免这种情况,你可以告诉你的机器根据你的要求确定进程的优先级。

此优先级在 Linux 中称为 Niceness,其值介于 -2019. Niceness 索引越低,该任务的优先级越高。

所有进程的默认值为 0。

要使用除默认值以外的 niceness 值启动进程,请使用以下语法

nice -n 'Nice value' process name

如果系统上已经存在某个进程,那么你可以使用语法 Renice 其值。

renice 'nice value' -p `PID`

要更改 Niceness,可以使用 top 命令确定 PID(进程 ID)及其 Nice 值。稍后使用 renice 命令更改其值。

df

此实用程序报告所有文件系统上的可用磁盘空间(硬盘)。

dishan@vultr:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              216536       0    216536   0% /dev
tmpfs              49296     628     48668   2% /run
/dev/vda1       20583440 2374040  17144508  13% /
tmpfs             246476       0    246476   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             246476       0    246476   0% /sys/fs/cgroup
tmpfs              49292       0     49292   0% /run/user/1000

如果你希望以可读格式显示上述信息,请使用下面的命令

df -h

实际应用如下,

dishan@vultr:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            212M     0  212M   0% /dev
tmpfs            49M  628K   48M   2% /run
/dev/vda1        20G  2.3G   17G  13% /
tmpfs           241M     0  241M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           241M     0  241M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/1000

free

此命令显示 Linux 系统上的空闲和已用内存(RAM)。

dishan@vultr:~$ free
              total        used        free      shared  buff/cache   available
Mem:         492952       92836       87016         652      313100      383292
Swap:             0           0           0

你可以使用参数,free -m 以 MB 为单位显示输出,free -g 以 GB 显示输出

总结

  • 任何正在运行的程序或给予 Linux 系统的命令都称为进程
  • 进程可以在前台或后台运行
  • 进程的优先级索引在 Linux 中称为 nice。它的默认值为 0,它可以在 20 到-19 之间变化
  • Niceness 指数越低,该任务的优先级越高
命令 说明
bg 要将进程发送到后台
fg 在前台运行停止的进程
top 所有活动进程的详细信息
ps 提供为用户运行的进程的状态
ps PID 给出特定进程的状态
pidof 给出进程的进程 ID(PID)
kill PID 杀死一个进程
nice 启动具有给定优先级的进程
renice 更改已在运行的进程的优先级
df 显示系统中空闲的硬盘空间
free 显示系统中空闲的 RAM