什麼是進程?shell
進程是程序 的一次執行,能夠和別的進程併發執行的計算。在給定活動空間和初始條件下,在一個處理器上的執行過程,是系統進行資源分配和調度的一個獨立單位。進程是動態的、有生命週期的活動。內核能夠建立一個進程,而最終將由內核終止該進程使其消亡服務器
pstree - display a tree of processes併發
[root@localhost ~]# pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─VGAuthService ├─abrt-watch-log ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon} │ └─3*[{at-spi-bus-laun}] ├─at-spi2-registr───2*[{at-spi2-registr}] ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─chronyd ├─colord───2*[{colord}]
ps - report a snapshot of the current processes異步
ps -ef工具
[root@localhost ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 8月22 ? 00:00:12 /usr/lib/systemd/systemd --switched-root --system root 2 0 0 8月22 ? 00:00:00 [kthreadd] root 3 2 0 8月22 ? 00:00:01 [ksoftirqd/0] root 5 2 0 8月22 ? 00:00:00 [kworker/0:0H] root 7 2 0 8月22 ? 00:00:00 [migration/0] root 8 2 0 8月22 ? 00:00:00 [rcu_bh]
ps auxspa
[root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 193700 4984 ? Ss 8月22 0:12 /usr/lib/systemd/systemd --switch root 2 0.0 0.0 0 0 ? S 8月22 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 8月22 0:01 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 8月22 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 8月22 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 8月22 0:00 [rcu_bh]
a 顯示終端上的全部進程,包括其餘用戶的進程操作系統
x 顯示沒有控制終端的進程firefox
u 選項來查看進程全部者以及其餘的一些詳細信息code
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:進程擁有者
PID:pid
%cpu:佔用的CPU使用率
%MEM:佔用的記憶體使用率
VSZ:佔用的虛擬記憶體大小
RSS:佔用的記憶體大小
TTY:終端的次要裝置號碼
STAT:該進程的狀態
D:不可中低端的靜止
R:正在執行中
S:靜止狀態
T:暫停執行
Z:不存在但暫時沒法消除
W:沒有足夠的記憶體分頁能夠分配
<:高優先序的進程
N:低優先序的進程
L:有記憶體分頁分配並鎖在記憶體裏
START:進程開始的時間
TIME:執行的時間
COMMAND:所執行的命令
ps工具標識進程的五種狀態碼:
D:不可中斷
R:運行
S:中斷
T:中止
Z:僵死
top - display Linux tasks
[root@localhost ~]# top top - 17:52:22 up 1 day, 16 min, 3 users, load average: 0.00, 0.01, 0.05 Tasks: 217 total, 1 running, 216 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1867048 total, 90128 free, 900872 used, 876048 buff/cache KiB Swap: 2097148 total, 2066476 free, 30672 used. 699500 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 726 root 20 0 21620 1024 864 S 0.7 0.1 0:26.39 irqbalance 9 root 20 0 0 0 0 S 0.3 0.0 0:18.25 rcu_sched 1 root 20 0 193700 4984 3000 S 0.0 0.3 0:12.93 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.16 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:01.71 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:00.46 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
top命令時Linux系統管理的一個主要的命令,經過她能夠得到許多信息,,具體請百度。。我也寫不清楚。。blog
信號
進程使用稱爲信號的消息進行通訊,進程隨時都會接受信息(異步)。除信號編號(表示信號屬於那種類型)以外,信號不懈怠其餘任何信息。
操做系統經過信號與進程之間進行通訊,根據信號進行編號,進程能以不一樣的方式處理信號。在許多種狀況下,這些信號勁致使進程退出,一個典型的信號是SIGTERM,該信號終止進程,要求他乾淨的退出,另外一個是sigkill,該信號中斷進程,須要當即退出。
man 7 signal命令查看手冊
SIGNAL(7) Linux Programmer's Manual SIGNAL(7) NAME signal - 有效信號的清單 描述 (DESCRIPTION) 下面 列出 Linux 支持的 信號. 某些 信號 依賴於 體系結構(architecture). 首先, POSIX.1 描述了 下列 信號. 信號 值 動做 說明 ───────────────────────────────────────────────────────────────────── SIGHUP 1 A 在控制終端上是掛起信號, 或者控制進程結束 SIGINT 2 A 從鍵盤輸入的中斷 SIGQUIT 3 C 從鍵盤輸入的退出 SIGILL 4 C 無效硬件指令 SIGABRT 6 C 非正常終止, 可能來自 abort(3) SIGFPE 8 C 浮點運算例外 SIGKILL 9 AEF 殺死進程信號 SIGSEGV 11 C 無效的內存引用 SIGPIPE 13 A 管道停止: 寫入無人讀取的管道 SIGALRM 14 A 來自 alarm(2) 的超時信號 SIGTERM 15 A 終止信號 SIGUSR1 30,10,16 A 用戶定義的信號 1 SIGUSR2 31,12,17 A 用戶定義的信號 2 SIGCHLD 20,17,18 B 子進程結束或中止 SIGCONT 19,18,25 繼續中止的進程 SIGSTOP 17,19,23 DEF 中止進程 SIGTSTP 18,20,24 D 終端上發出的中止信號 SIGTTIN 21,21,26 D 後臺進程試圖從控制終端(tty)輸入 SIGTTOU 22,22,27 D 後臺進程試圖在控制終端(tty)輸出 下面的 信號 定義 在 SUSv2 中, 而 POSIX.1 沒有 定義.
使用kill命令能夠給進程發送信號
kill pid 能夠殺掉進程
每一個邏輯處理單元在其CPU上一次只能執行一個進程,所以,每一個能夠運行的進程都具備調度優先級;就緒進程的排名,能夠肯定下一個應該運行的進程。
Linux進程調度程序將CPU時間分爲時間段,每一個進程將依次在邏輯處理單元上運行,優先級較高的進程先運行,用於計算此優先級的公式十分複雜,可是用戶能夠經過設置進程的nice來影響進程的優先級。
nice的範圍是從-20(很是但願佔用它進程的CPU時間)到19(很是願意將CPU時間讓給其餘的進程),默認值爲0.
root用戶能夠提升和下降nice的值,普通用戶只能提升nice的值(下降優先級)
在一個終端運行top命令,切換到另外一個終端用ps命令查看top命令的默認nice值
[root@localhost ~]# ps axo pid,nice,tty,comm | grep top 76524 0 pts/1 top [root@localhost ~]#
nice能夠用於設置新警察的nice值
[root@localhost ~]# ps axo pid,nice,tty,comm | grep top 76535 5 pts/1 top [root@localhost ~]#
renice能夠用於更改正在運行的進程的nice值
[root@localhost ~]# ps axo pid,nice,tty,comm | grep top 76535 5 pts/1 top [root@localhost ~]# renice -5 76535 76535 (進程 ID) 舊優先級爲 5,新優先級爲 -5 [root@localhost ~]#
做業控制
Linux總的前臺任務和後臺任務,對應的就是前臺進程和後臺進程
前臺進程是屬於某一個終端的進程,若是使用這個終端的推出了,那麼這個進程就會被kill掉
後臺進程是獨立於任何終端的進程,除非是進程本身主動退出(正常和非正常),或者被其餘的進程和手工手動kill掉,後臺進程會一直運行到關機
若是在進程運行的時候加上一個&符號,那麼當前的終端就會被釋放出來,程序是放在了後臺去運行的(能夠在後臺放置多個程序)
[root@localhost ~]# firefox &
[root@localhost ~]#
可是查看後臺仍是能夠查到這個進程的
在後臺運行的進程能夠經過%加做業好(ID),用fg調回前臺運行
[root@localhost ~]# firefox & [1] 76847 [root@localhost ~]# jobs [1]+ 運行中 firefox &
fg %1 這樣能夠調回前臺運行
經過xshell打開會報錯,可是直接在服務器運行就徹底沒問題
在後臺掛起的任務,能夠使用bg使任務繼續在後臺運行
使用kill %1命令能夠殺死任務
[root@localhost ~]# kill %1 [root@localhost ~]#