運維基礎-進程管理

什麼是進程?shell

進程是程序 的一次執行,能夠和別的進程併發執行的計算。在給定活動空間和初始條件下,在一個處理器上的執行過程,是系統進行資源分配和調度的一個獨立單位。進程是動態的、有生命週期的活動。內核能夠建立一個進程,而最終將由內核終止該進程使其消亡服務器

經過ps,top查看進程

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

信號控制進程kill ,pkill

信號

進程使用稱爲信號的消息進行通訊,進程隨時都會接受信息(異步)。除信號編號(表示信號屬於那種類型)以外,信號不懈怠其餘任何信息。

操做系統經過信號與進程之間進行通訊,根據信號進行編號,進程能以不一樣的方式處理信號。在許多種狀況下,這些信號勁致使進程退出,一個典型的信號是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  能夠殺掉進程

經過nice控制進程的優先級

每一個邏輯處理單元在其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 ~]# 

掌握shell做業控制機制jobs

做業控制

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 ~]# 
相關文章
相關標籤/搜索