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
-
输入进程后,再按Ctrl + Z
-
输入
bg
后将进程发送到后台。
fg
你可以使用命令 fg
继续已停止的程序并将其置于前台。
该实用程序的简单语法是:
fg jobname
例如,
- 推出
banshee
音乐播放器 - 使用Ctrl + Z命令停止它
- 使用
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
,其值介于 -20
到 19
. 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 |