Linux進程管理

一、  進程管理的基礎概念shell

  1. 什麼是進程centos

顧名思義,進程是指當前系統運行的程序,每一個進程有惟一的標識符PID,進程由內核管理經過task_strucktask_list來調度和管理的。安全

  1. 內核的定義及功能bash

內核是操做系統的核心,控制的計算機的基本硬件,全部程序和CPU、內存等計算機硬件通信都須要向內核申請。內核負責進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能。網絡

  1. 進程建立session

Linux全部進程都是經過init建立,init是全部進程的父進程,父進程的子進程必須又父進程來關閉,若是父進程被關閉,子進程也會被關閉。進程建立方法由三種:fork()clone()vfork()fork()經過克隆的方式建立子進程,可是子進程擁有本身的結構和 PID,修改子進程的配置文件,並不會影響父進程;系統調用fork()vfork()是無參數的,而clone()則帶有參數,clone()會有選擇的將父進程的資源複製給子進程,沒有複製的部分將經過指針共享;vfork()建立的子進程會與父進程共享空間和資源,子進程的變量修改會直接影響父進程。多線程

  1. 進程優先級app

進程的優先級在系統中經過數字0-139表示,數字越小優先級越高。ssh

0:爲全部進程的父進程socket

1-99:顯示進程的實時優先級,爲內核調度,動態分配

100-139:顯示進程的靜態優先級

Nice值:調整進程靜態優先級,nice值範圍爲-2019,依次對應100-139,負值爲高優先級,正值爲低優先級,0表示不調整優先級。

  1. 進程通訊(Inter process communication

同主機經過singnal(信號)、shared memory(共享內存)、semerphore(旗語)來通信,若是不在贊成主機上須要經過remote procecure callRPC遠程通信協議)、socket(套接字)來通訊。

  1. 進程管理機制

Linux內核的特色是Preemption(搶佔)多任務運行,這種搶佔不須要徵求正在運行的進程的贊成而強制打斷。

進程的類型分爲一下兩種:

守護進程:在系統引導過程當中啓動的進程,跟終端無關,通常稱之爲後臺進程;

前臺進程:跟終端相關,經過終端啓動的進程,通常稱之爲前臺進程,能夠將前臺進程送日後臺,以守護模式運行

進程運行狀態主要有如下幾種:

running:運行態

ready:就緒態

睡眠態:睡眠態分爲interruptable(可中斷睡眠)和uninterruptable(不可中斷睡眠),可中斷睡眠表示隨時能夠喚醒的,不可中斷失眠表示不能隨時喚醒的,通常不可中斷睡眠發生在外部條件不知足,沒法繼續進行時,例如磁盤I/O的時候。

stopped:中止態,暫停於內存中,但不會被調度,除非手動啓動

zomble:僵死態,每一個進程都由其父進程建立,子進程銷燬後由父進程進行回收,可是父進程被銷燬於子進程以前,則該子進程被稱爲僵死進程。

進程分類:

CPU-Bound:計算密集型,只大部分時間用來計算,I/O一直處於等待中的較多;

IO-Bound:只CPU一直出於等待中中,IO頻率較高。

 

二、  進程查看管理工具詳解

經常使用的進程管理命令和工具備pstreepspidoftophtopglancespmapvmstatdstatkillpkilljobbgfgnohup

 

2.1 pstree

   功能:使用樹型顯示進程

   用法:pstree

   示例:

[root@localhost ~]# pstree

systemd─┬─ModemManager───2*[{ModemManager}]

        ├─NetworkManager─┬─dhclient

                        └─2*[{NetworkManager}]

        ├─2*[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───{at-spi2-registr}

        ├─atd

        ├─auditd─┬─audispd─┬─sedispatch

                         └─{audispd}

                └─{auditd}

        ├─avahi-daemon───avahi-daemon

        ├─bluetoothd

        ├─caribou───2*[{caribou}]

        ├─colord───2*[{colord}]

        ├─crond

        ├─cupsd

        ├─2*[dbus-daemon───{dbus-daemon}]

        ├─dbus-launch

        ├─dconf-service───2*[{dconf-service}]

        ├─dnsmasq───dnsmasq

        ├─evolution-calen───5*[{evolution-calen}]

        ├─evolution-sourc───2*[{evolution-sourc}]

        ├─firewalld───{firewalld}

        ├─gconfd-2

        ├─gdm─┬─Xorg

             ├─gdm-session-wor─┬─gnome-session─┬─abrt-applet───{abrt-applet}

                                             ├─gnome-settings-───4*[{gnome-settings-}]

                                             ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]

                                                                       ├─ibus-engine-sim───2*[{ibus-engine-sim}]

                                                                       └─2*[{ibus-daemon}]

                                                          └─6*[{gnome-shell}]

                                             ├─gnome-software───3*[{gnome-software}]

                                             ├─nautilus───3*[{nautilus}]

                                             ├─seapplet

                                             ├─ssh-agent

                                             ├─tracker-extract───13*[{tracker-extract}]

                                             ├─tracker-miner-a───2*[{tracker-miner-a}]

                                             ├─tracker-miner-f───3*[{tracker-miner-f}]

                                             ├─tracker-miner-u───2*[{tracker-miner-u}]

                                             └─3*[{gnome-session}]

                              └─2*[{gdm-session-wor}]

             └─3*[{gdm}]

        ├─gnome-keyring-d───4*[{gnome-keyring-d}]

        ├─gnome-shell-cal───4*[{gnome-shell-cal}]

        ├─gnome-terminal-─┬─bash

                         ├─gnome-pty-helpe

                         └─3*[{gnome-terminal-}]

        ├─goa-daemon───3*[{goa-daemon}]

        ├─goa-identity-se───2*[{goa-identity-se}]

        ├─gsd-printer───{gsd-printer}

        ├─gssproxy───5*[{gssproxy}]

        ├─gvfs-afc-volume───2*[{gvfs-afc-volume}]

        ├─gvfs-goa-volume───{gvfs-goa-volume}

        ├─gvfs-gphoto2-vo───{gvfs-gphoto2-vo}

        ├─gvfs-mtp-volume───{gvfs-mtp-volume}

        ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]

        ├─gvfsd───{gvfsd}

        ├─gvfsd-fuse───4*[{gvfsd-fuse}]

        ├─gvfsd-metadata───{gvfsd-metadata}

        ├─gvfsd-trash───2*[{gvfsd-trash}]

        ├─httpd───5*[httpd]

        ├─ibus-x11───2*[{ibus-x11}]

        ├─ksmtuned───sleep

        ├─libvirtd───15*[{libvirtd}]

        ├─lsmd

        ├─lvmetad

        ├─master─┬─pickup

                └─qmgr

        ├─mission-control───2*[{mission-control}]

        ├─packagekitd───2*[{packagekitd}]

        ├─polkitd───5*[{polkitd}]

        ├─pulseaudio───2*[{pulseaudio}]

        ├─rngd

        ├─rsyslogd───2*[{rsyslogd}]

        ├─rtkit-daemon───2*[{rtkit-daemon}]

        ├─smartd

        ├─sshd───sshd───bash───pstree

        ├─systemd-journal

        ├─systemd-logind

        ├─systemd-udevd

        ├─tracker-store───7*[{tracker-store}]

        ├─tuned───4*[{tuned}]

        ├─udisksd───4*[{udisksd}]

        ├─upowerd───2*[{upowerd}]

        ├─vmtoolsd───{vmtoolsd}

        ├─vmtoolsd

        └─wpa_supplicant

 

2.2 pstree

   用途:report a snapshot of the current processes(當前進程快照的報告)

   語法:ps [option]…

   選項:

     經常使用組合:aux

       u:以用戶爲中心組織進程狀態信息的顯示

            a:與用戶終端相關的進程

       x:與用戶終端無關的進程

     [root@localhost ~]# ps aux

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

     命令顯示內容解析:

       VSZ: Virtual memory Size ,虛擬內存集

       RSS: Resident size    ,常駐內存集

       STAT:進程狀態

          Rrunning,運行態

          Sinterruptable sleeping,可中斷睡眠

          Duninterruptable sleeping,不可中斷睡眠

          Tstopped,中止態

          Zzamble,僵死態

         

          +:前臺進程

          l:多線程進程

          N:低優先級進程

          <:高優先級進程

          ssession leader

 

     經常使用組合:-ef

            -e : 顯示全部的進程

       -f :顯示完整格式的程序信息

 

     經常使用組合:-eFH

       -F : 顯示完整格式的進程信息

       -H : 以進程層級格式顯示進程的相關信息

 

     經常使用組合:-eo,axo

       -eo : pid , tid , class , rtprio , ni ,pri , psr , pcup , stat , comm

       -axo : stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

            ni: nice

            pri : priority ,優先級

            prs: processor ,cpu

            rtprio:實時優先級

 

2.2 pgreppkill

         用途:

                   pgrep : 以名稱爲依據顯示對應進程的PID

                   pkill:殺死運行中的進程

         格式:

pgrep[ option ] pattern

pkill [ option ] pattern

         選項:

                   -u uid effective user

                   -U uid real user

                   -t terminal : 與指定終端相關的進程

                   -l :顯示進程名

                   -a 顯示完整格式的進程名

                   -p pid : 顯示其父進程爲此處指定的進程的進程列表

 

2.3 pidof

         用途:根據進程名獲取其PID

 

2.4 top

         內置命令

                   排序

                            P:以佔據的CPU顯示百分比

                            M:以佔據的內存百分比

                            T:累計佔據CPU時長

 

                   首部信息顯示

                            Uptime信息:l

                            taskCPU信息:t

                                     CPU分別顯示:1

                            Memory信息:m

                  

                   退出命令:q

                   更改刷新時間:s

                   殺死進程:k

 

         選項:

                   -d:指定刷新間隔,默認爲3s

                   -b:以批次方式顯示

                   -n #:顯示多少批次

 

2.5 htop

         用途:功能和top同樣,可是更強大,顯示更直觀。

         安裝方法:htop並非centos自帶工具,須要配置EPEL源,而後使用yum安裝,安裝過程以下:

/etc/yum.repos.d目錄下新建一個以.repo結尾的文件,例如CentOS-EPEL.repo

[root@localhost yum.repos.d]# vi /etc/yum.repos.d/CentOS-EPEL.repo

[EPEL]               ####yum源描述

name=EPEL          ####yum源名稱

baseurl=http://dl.fedoraproject.org/pub/epel/7/x86_64/  ####yum源地址

gpgcheck=0       ####是否檢查檢查來源合法性,0爲不檢查,1爲檢查

enable=1         ####是否啓用此yum

                            yum –y install htop

        

         選項:

                   -d #:指定刷新時間間隔,默認爲3s

                   -b:以批次方式顯示

                   -n # :顯示多少批次

        

         命令:

                   s:跟蹤選定進程的系統調用

                   l:顯示選定進程打開的文件列表

                   a:將進程綁定在指定CPU核心上

                   t:顯示進程樹

 

2.5 vmstat

         用途:報告虛擬內存狀態

         格式:vmstat [ options ] [ delay [ conut ] ]

[root@localhost yum.repos.d]# vmstat

procs ----------------memory------------------ ---swap-- -----io------------ -system-- ------cpu-----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 3  0      0 876260   1368 638152  0    0     8    2    43   70  0  0 99  0  0

        

procs:

         r:等待運行的進程個數

         b:出於不可中斷睡眠的進程個數(被阻塞的隊列長度)

memeory
                   swpd
:交換分區的使用總量

         free:空閒的物理內存總量

         buffer:用於buffer的內存總量

         cache:用於cache的內存總量

swap

         si:數據進入swap中的數據速率(kb/s

         so:數據離開swap中的數據速率(kb/s

io

         bi:從塊設備讀取數據的速率(kb/s

         bo:保存數據到數據塊的速率(kb/s

system

         cscentext switch):進程切換的速率

         ininterrupts):中斷速率

cpu

         us:用戶空間

         sy:內核空間

         id:空閒比例

         wa:等待運行進程的個數

         st:別虛擬化佔據的時間比例

         選項:

                   -s:顯示內存的統計數據

 

2.6 pmap命令

         用途:報告進程佔用內存空間的明細圖

         格式:pmap [ option ] pid [ … ]

         選項:

                   -x:顯示詳細格式的信息

         也可經過 cat /proc/PID/maps來查看,功能等同於pmap

 

2.7 glances

         用途:監控本地或遠程主機系統的CPU、內存、交換分區、網絡、進程等相關參數。

         安裝:須要先配置EPEL源,而後使用yum安裝,EPEL配置方法請參考2.5

         格式:glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

         內建命令

                a  Sort processes automatically     l  Show/hide logs

                 c  Sort processes by CPU%         b  Bytes or bits for network I/O

                m  Sort processes by MEM%       w  Delete warning logs

                p  Sort processes by name         x  Delete warning and critical logs

                 i  Sort processes by I/O rate        1  Global CPU or per-CPU stats

                 d  Show/hide disk I/O stats         h  Show/hide this help screen

                f  Show/hide file system stats          t  View network I/O as combination

                n  Show/hide network stats           u  View cumulative network I/O

                s  Show/hide sensors stats            z  Show/hide processes list

                y  Show/hide hddtemp stats          q  Quit (Esc and Ctrl-C also work)      

 

         經常使用選項:

                   -b :以byte爲單位顯示網卡速率

                   -d :關閉磁盤I/O模塊

                   -f  /path/to/somfile :設定輸入文件的位置

                   -o HTML|CSV:輸出格式

                   -m:禁用mount模塊

                   -n:禁用網絡模塊

                   -t #:延時時間間隔

                   -1:每一個cpu的相關數據單獨顯示

        

         C/S模式下glances使用方法:

                   服務模式:

[root@localhost ~]# glances -s -B IPADDR(本地監聽的IP地址)

Glances server is running on IPADDR:61209

                   客戶端模式:

            [root@localhost ~]# glances -c IPADDR(服務端IP地址)

 

2.8 dstat

         用途:生成系統資源統計

         格式:dstat [-afv] [options..] [delay [count]]

         生成信息解析:

[root@localhost ~]# dstat

You did not select any stats, using -cdngy by default.

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--

usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw

                0   0  99   0   0   0|6504B 1665B|   0     0 |   0     0 |  43    68

                 0   1  99   0   0   0|   0     0 | 180B  934B|   0     0 |  35    47

                0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  29    31    

                   Total cpu usage          

                            usr:用戶空間            

                            sys:內核空間            

                            idl:空閒比例

                            hiq:硬中斷次數

                            siq:軟中斷次數

                   dsk/total

                            read:從塊設備讀取數據的速率

                            writ:數據寫入塊設備的速率

                   net/total

                            recv:當前網絡接收數據包接受的速率,以kb/s爲單位

                            send:當前網絡發送數據包的速率,以kb/s爲單位

                   paging

                            in:換進

                            out:換出

                   system

                            int:系統中斷次數

                            csw:安全上下文切換次數

         選項:

                   -c:顯示CPU相關統計數據

                   -C:當cpu有多個是可使用 –C 0,1…total分別顯示多塊cpu狀態

                   -d:顯示硬盤相關信息

                   -D:當硬盤有多塊時可使用 –D hda1,…,total分別顯示多塊硬盤狀態

                   -g:顯示page相關統計數據

                   -m:顯示memory相關統計數據

                   -n:顯示network相關統計數據

                   -p:顯示process相關統計數據

                   -r:顯示IO相關統計數據

                   -s:顯示swapped相關的統計數據

 

                   --tcp:顯示TCP協議相關統計數據

                   --udp:顯示UDP協議相關的統計數據

                   --unix:顯示unix協議相關的統計數據

                   --socket:顯示套接字相關的統計數據

                  

                   --top-tcp:顯示CPU佔用最高的進程

                   --top-mem:顯示內存佔用最高的進程

                   --top-io:顯示IO佔用最高的進程

                   --top-lantency:顯示最大延遲的進程

                  

                   --out-file /path/to/file.csv:能夠將信息輸出至指定的csv文件便於之後查看。

 

2.9 kill

         用途:向進程發送控制信號,以實現對進程的管理

         顯示當前系統可用信號:

                   # kill -l

                   #man 7 signal

                   經常使用信號:

1)  SIGHUB:無需關閉進程而讓其從新讀取配置文件

2)  SIGINT:停止正在運行的進程,至關於Ctrl+c

9)  SIGKILL:殺死正在運行的進程

15) SIGTERM:終止正在運行的進程

18) SIGCONT:將中止的進程繼續運行

19) SIGSTOP:中止進程

 

                   指定信號的方法:

(1)       信號的數字標識 129

(2)       信號完整名稱 SIGHUB

(3)       信號簡寫名稱 HUB

 

進程發送信號格式:

         # kill [ - signal ] pid

終止名稱下的全部進程:

         # killall [ - signal ] Program

 

2.10 Linux做業控制

         做業類型一般分爲兩種:

                   前臺做業:經過終端啓動,且啓動後一直佔據終端

                   後臺做業:能夠經過終端啓動,但啓動後即轉入後臺(釋放終端);

         讓做業運行於後臺有兩種方法:

(1)       運行中的做業

Ctrl+z

(2)       還沒有運行的做業

# COMMAND &

                   此類做業雖然被送日後臺但依然與終端相關,若是但願送日後臺後,剝離與終端的關係:

                            # nohub COMMAND &

                   查看全部做業:

                            # jobs

                   做業控制:

                            # fg [ % ] [job_num ] :把指定的後臺做業調回到前臺

                            # bg [ % ] [ job_num]:把送日後臺的進程在後臺繼續運行

                            # kill [ % job_num]:終止指定的做業

 

2.11 進程優先級調整

         Nice命令

                   用途:調整進程靜態優先級,靜態優先級爲100-139,用nice值表示依次對應-20 – 19,進程默認啓動時nice值爲0,優先級爲120

                   格式:nice [ option ] [ command [ ARG ] …]

                   示例:# nice –10 htop   ####-10nice值運行htop進程

 

         Renice命令

                   用途:重置設置進程的nice

                   格式:renice [ -n ] priority pid…

                   示例:# renice -1 33508  ####將進程號33508的進程的nice值變動爲-1

 

         查看nice值的方法

                   # ps axo pid,comm,ni

相關文章
相關標籤/搜索