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 |