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