進程管理

linux進程管理

    內核的功能:進程管理、文件系統、網絡管理、驅動程序、安全功能等

    Pcrocess:運行中的程序的一個副本,是被載入內存中的一個指令集和

        PID:進程ID,用來標記各個進程

        task struct:進程的元數據空間,用來存儲進程數據信息和數據結構的格式

        task list:多個任務的task struct組成的鏈表

        MMU:負責轉換線性地址和物理地址

       總結:內核為每一個進程保存了一個task struct,記錄了線性地址空間和物理地址空間及PID等信息,當一個進程想要訪問其線性地址空間中的數據時,內核會每次將其線性地址空間轉換為物理地址空間取得數據來進行操作的,該過程有一個專門的硬件潘成就是MMU,memory managerment unit。

    進程的創建:當系統啟動后,先去運行內核代碼,等內核掌管一切后,創建第一個進程,我們稱為INIT進程,內核空間和用戶控件創建出來了,后續內核空間所有管理工作都有INIT負責,INIT負責所有進程,進程都由其父進程創建,內核中有一個函數fork()用于創建子進程。

    進程的優先級:

        系統優先級:數字越小,優先級越高

            0-139(centos4,5)

                各有140個運行隊列和過期隊列

            0-98,99(centos6)

        實時優先級:rtprio 99-0,值越大優先級越過

    

    進程優先級調整:
        靜態優先級: 100-139
        進程默認啟動時的nice值為0,優先級為120
        只有根用戶才能降低nice值(提高優先性)

        nice值:-20,19對應系統優先級100-139或99

        命令:

            nice [option] [Command [arg]…]  讓進程已哪個優先級運行(普通用戶調整優先級,只能把ni調大)

                    nice -n -10 ping 127.0.0.1

            renice [-n] priority pid…  更改正在運行進程的優先級(已經運行的程序默認優先級是0)

                    renice -n -10 5168

            查看 ps axo pid,comm,ni

root@cenots6.8  ~ # ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   3108   3104  0  80   0 - 27120 wait   pts/1    00:00:00 bash
4 R     0   3512   3108  0  80   0 - 27033 -      pts/1    00:00:00 ps

        根據ps -l查詢到的結果,可以看到PID進程編號,PPID父進程編號,PRI即進程的優先級,或者通俗點說就是程序被CPU執行的先后順序,此值越小進程的優先級別越高,NI就是前面提到的nice值,其表示進程可被執行的優先級的修正數值。如前面所說,PRI值越小越快被執行,那么加入nice值后,將會使得PRI變為:PRI(new)=PRI(old)+nice。這樣,當nice值為負值的時候,那么該程序將會優先級值將變小,即其優先級會變高,則其越快被執行,因此需要注意的:進程的nice值不是進程的優先級,他們不是一個概念,但是進程nice值會影響到進程的優先級變化。

    進程相關概念:內核完成資源分配要占用一段空間,剩余的分配給進程使用,為了實現高效分配,把剩余內存切割成固定大小的片段,然后分片段給進程,大小為4K,每個片段就叫做page frame(頁框,存儲頁面數據),分配內存時,發現那個頁框空間就分配哪個給進程,,分配的頁框可以是連續的,也可以是不連續的,將這些頁框分配給進程后,加一個中間層,將這些頁框偽裝成連續的,每一個進程都是一個虛擬的內存,而不是真正的內存,而每個進程啟動時,他認為目前系統運行的只有內核和自己的程序,所有內存空間他都可用,其他進程也認為所有的內存空間他們都可以用,所以他們們以為所有可用的空間稱為線性地址空間,而真正占據的才是分配物理空間叫做物理空間。

    進程類型:

        守護進程:daemon,在系統引導過程中啟動的進程,和終端無關進程

        前臺進程:根終端無關,通過終端啟動的進程

            注意:可以把前臺進程送往后來運行,以守護模式運行

    進程狀態:

        運行態:running

        就緒態:ready

        睡眠態:

            可中斷:interruptable

            不可中斷:uninterruptable

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

        僵尸態:zombie,結束進程,父進程結束前,子進程不關閉

        端口:

                0-1023:永久地分配給固定的應用使用,80/http, 21/ftp, 25/smtp, 110/pop3, 143/imap4;僅root有權限使用,特權端口;

                 1024-41951:注冊端口,但不嚴格,3306/mysql, 11211/memcached,

                 41952+:客戶端程序使用的隨機端口,動態端口,或稱為私有端口;

                 /proc/sys/net/ipv4/ip_local_port_range

Linux系統狀態的查看及管理工具:

    常用命令:pstree、ps、pidof、pgrep、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup

    pstree:顯示進程樹

    pidof processName:根據確切的進程名稱查詢進程

            pidof passwd

            4121

    ps:process state用于顯示命令執行前所有進程的狀態

        選項:

            a:選項包括所有終端的進程

            x:選項包括不連接終端的進程

            u:選項顯示進程所有者的信息

            f:選項顯示進程的父進程

            o:屬性…選項顯示定制的信息,如:pid、comm、%cpu、%mem、state、tty、euser、ruser

                ps axo pid,comm,%cpu,%mem,state,tty,euser,ruser

                ps aux | grep sleep

            -e:顯示所有進程

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

root@cenots6.8  ~ # ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19344  1544 ?        Ss   08:58   0:02 /sbin/init
root          2  0.0  0.0      0     0 ?        S    08:58   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:58   0:00 [migration/0]
USER:用戶      PID:進程   %CPU:累計使用CPU的時間    %MEM:內存空間占用比率   VSZ:虛擬內存大小,線性內存  RSS:常駐內存級(不能放在swap交換內存上)

            STAT:進程狀態

                R:running

                S:interuptable sleeping

                D:uninterruptable sleeping

                T:stopped

                Z:zommbie

                +:前臺進程

                I:多線程進程

                N:低優先級進程

                <:高優先級進程 

                s:session leader,會話(子進程)發起者 

    pgrep:按預定的模式查找進程

        pgrep [options] pattern

            -u uid:生效者 有效的是誰

                pgrep -u root

                輸出結果是PID

            -U uid:真正發起運行命令者

                例如 wang用戶發起passwd命令,發起者是wang,生效者是root 

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

                pgrep -t pts/0 -l

                3014 bash

                4077 sleep

            -l:顯示進程名字

                pgrep -l sleep

                3960 sleep

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

            -P:顯示指定的子進程

        uptime:

            root@cenots6.8  ~ # uptime
            16:52:15 up  7:53,  2 users,  load average: 0.01, 0.02, 0.05
            顯示當前時間    系統已啟動的時間    當前登錄的用戶    系統平均負載(1、5、10鐘的平均負載,一般不會超過1)

        系統平均負載:指在特定時間間隔內運行隊列中的平均進程數

        如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。 如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題。如果linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了。

   

    top:任務查看器,顯示linux系統的進程信息,從上往下排序

top - 17:14:54 up  8:16,  2 users,  load average: 0.03, 0.07, 0.05
Tasks: 166 total,   1 running, 165 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004136k total,   670124k used,   334012k free,    61084k buffers
Swap:  2097148k total,        0k used,  2097148k free,   344384k cached

us:用戶空間    sy:內核空間    ni:調整nice時間    id:空閑    wa:等待IO時間    hi:硬中斷    si:軟中斷    st:虛擬機偷走時間

        內置命令:

            P:以占據的CPU百分比,%CPU

            M:占據內存百分比,%MEM

            T:累計占據CPU的時長,TIME+

        首部顯示信息:

            uptime信息:l命令

            tasks及cpu信息,t命令

            cpu分別顯示:1數字

            memory信息:m命令

        退出命令:q

        修改刷新時間間隔:s

        終止指定進程:k

        保存文件:W

        選項:

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

            -b:以批次方式顯示 top -b

            -n #:顯示多少批次

    htop命令:需要從Fedora-EPEL源安裝

        選項:

            -d #:指定延遲時間

            -u UserName:僅顯示指定用戶的進程

            -s COLUME:以指定字段進程排序

        子命令:

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

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

            a:將選定的進程綁定至指定的CPU核心

            t:顯示進程數

    

    vmstat命令:虛擬內存信息

        vmstat 2 4 :2s刷新一次 刷新4次

root@cenots6.8  ~ # vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 435712  23792 187208    0    0   227     6  110  125  1  3 96  0  0	

        procs:

            r:等待運行的進程個數,和核心數有關

            b:處于不可中斷睡眠態的過程個數(被阻塞的隊列長度)   

        memory:

            swpd:交換內存的使用總量

            free:空閑物理內存總量

            buffer:用于buffer的內存總量

            cache:用于cache的內存總量

        swap:

            si:從磁盤交換進內存的數據速率

            so:從內存交換值磁盤的數據速率

        io:

            bi:從塊設備讀入數據到系統的速率(kb/s)

            bo:保存數據至塊設備的速率

        system:

            in:interrupts,中斷速率,包括時鐘

            cs:context switch ,進程切換速率

        cpu:

            us:Time spent running non-kernel code

            sy: Time spent running kernel code

            id: Time spent idle. Linux 2.5.41前,包括IO-wait time.

            wa: Time spent waiting for IO. 2.5.41前,包括in idle.

            st: Time stolen from a virtual machine. 2.6.11前, unknown

        

        pmap命令:進程對應的內存映射

            pmap [options] pid […]

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

        

        glances命令:需要依賴epel源進行安裝

                     cenots6.8 (CentOS 6.8 64bit / Linux 2.6.32-642.el6.x86_64)                     Uptime: 0:20:09

CPU       1.0%             	 Load   4核      Mem    36.4%  active:    241M   Swap    0.0%
user:     0.3%  nice:     0.0%   1 min:   0.01   total:  981M  inactive:  162M   total: 2.00G
system:   0.6%  iowait:   0.0%   5 min:   0.10   used:   357M  buffers:  24.2M   used:      0
idle:    99.0%  irq:      0.0%   15 min:  0.20   free:   623M  cached:    185M   free:  2.00G

網絡       Rx/s    Tx/s   Tasks  200 (298 thr),  1 run, 199 slp,  0 oth  自動排序
eth1       320b     9Kb
lo           0b      0b    VIRT   RES  CPU%  MEM%   PID USER        NI S    TIME+ NAME
pan0         0b      0b    206M   12M   4.1   1.2  2884 root         0 R  0:00.51 /usr/bin/python /usr/bin/glances
                            19M    2M   0.0   0.2     1 root         0 S  0:02.19 /sbin/init
Disk I/O   In/s   Out/s       0     0   0.0   0.0     2 root         0 S  0:00.20 kthreadd
sda1          0       0       0     0   0.0   0.0     3 root         0 S  0:00.20 migration/0
sda2          0       0       0     0   0.0   0.0     4 root         0 S  0:00.10 ksoftirqd/0
sda3          0       0       0     0   0.0   0.0     5 root         0 S  0:00.00 stopper/0
sdd1          0       0       0     0   0.0   0.0     6 root         0 S  0:00.00 watchdog/0
                              0     0   0.0   0.0     7 root         0 S  0:00.36 migration/1
Mount      Used   Total       0     0   0.0   0.0     8 root         0 S  0:00.00 stopper/1
/         4.29G    116G       0     0   0.0   0.0     9 root         0 S  0:00.00 ksoftirqd/1
/boot     33.4M    190M       0     0   0.0   0.0    10 root

          a  自動排序                         l  Show/hide logs

          c  根據CPU使用率排序                   b  Bytes or bits for network I/O

          m  根據內存占用比排序                  w  刪除警告日志

          p  根據進程名字排序                   x  刪除警告和嚴重級別的日

          i  Sort processes by I/O rate             1  全局CPU或者每個CPU的狀態

          d  顯示/隱藏硬盤I/O狀態                 h  Show/hide this help screen

          f  顯示/隱藏文件系統狀態                t  View network I/O as combination

          n  顯示/隱藏network狀態                 u  View cumulative network I/O

          s  顯示/隱藏sensors狀態                 q  Quit (Esc and Ctrl-C also work)

          y  顯示/隱藏hddtemp狀態

        常用選項:

            -b: 以Byte為單位顯示網卡數據速率

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

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

            -o {HTML|CSV}:輸出格式

            -m: 禁用mount模塊

            -n: 禁用網絡模塊

            -t #: 延遲時間間隔

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

        C/S模式下運行glances命令

        服務模式:

            glances -s -B IPADDR

            IPADDR: 指明監聽的本機哪個地址

        客戶端模式:

            glances -c IPADDR

            IPADDR:要連入的服務器端地址

    dstat命令:系統資源統計

        dstat [-afv] [options..] [delay [count]]

            -c: 顯示cpu相關信息

            -C #,#,…,total

            -d: 顯示disk相關信息

            -D total,sda,sdb,…

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

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

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

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

            -r: 顯示io請求相關的統計數據

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

            –tcp

            –udp

            –unix

            –raw

            –socket

            –ipc

            –top-cpu:顯示最占用CPU的進程

            –top-io: 顯示最占用io的進程

            –top-mem: 顯示最占用內存的進程

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

進程管理工具

    kill命令:

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

        顯示當前系統可用信號:kill -l

        常用信號:man 7 signal

            1:SIGHUP:無須關閉進程而讓其重讀配置文件

            2:SIGINT:終止正在運行的進程;相當于Ctrl+c

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

            15:SIGTERM:終止正在運行的進程(不指定選項默認15)

            18:SIGCONT:繼續運行

            19:SIGSTOP:后臺休眠

                

        指定信號的方法:

            信號的數字標識:1,2,9

            信號完整名稱:SIGHUP

            信號的簡寫名稱:HUP

        按PID對進程進行管理:

            kill [-SIGNAL] pid…

        按名稱對進程進行管理:

            killall [-SIGNAL] comm…

                killall -9 ping

        按模式對進程進行管理:

            pkill [options] pattern

                -u uid: effective user,生效者
                -U uid: real user,真正發起運行命令者
                -t terminal: 與指定終端相關的進程

                    pkill -t pts/2
                -l: 顯示進程名
                -a: 顯示完整格式的進程名
                -P pid: 顯示父進程為此處指定的進程的進程列表

作業管理控制:

    前臺作業:通過終端啟動,且啟動后一直占據終端

    后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端, 后臺程序 ctrl+c不能終止)

    終端之間的相互切換:

        例如:ping 127.0.0.1 & 后臺運行 –> jobs 查看進程編號 –> fg 編號 就能后臺程序轉為前臺

              ping 127.0.0.1 前臺運行 –> ctrl + z 轉為后臺休眠 –> bg 編號 后臺運行

    后臺作業雖然被送往后臺運行,但其依然與終端相關,退出終端,關閉后臺作業,如果希望送往后臺后,剝離與終端的關系則可采取以下方法:

        # nohup COMMAND & #screen;COMMAND

    查看所有作業:

        jobs

    同時運行多個進程,提高效率

        有三個腳本:f1.sh f2.sh f3.sh 讓其同時運行

        方法1、vim all.sh

                f1.sh&

                f2.sh&

                f3.sh&

         方法2、(f1.sh&);(f2.sh&);(f3.sh&)

         方法3、{ f1.sh& f2.sh& f3.sh& }

                              

原創文章,作者:Naruto,如若轉載,請注明出處:http://www.www58058.com/44883

(0)
NarutoNaruto
上一篇 2016-09-12
下一篇 2016-09-12

相關推薦

  • 好好學習 天天向上 先試試

    Linux干貨 2016-10-27
  • linux部署lamp,samba,nfs

    linux部署lamp,samba,nfs 實驗拓撲圖 實驗要求 五臺機器使用linux模擬 一臺機器做數據庫服務器,samba共享服務器,nfs共享服務器 其中兩臺做http服務器 一臺做PC機 實驗目的 samba服務器向一臺http服務器提供共享服務,做http的DocumentRoot,nfs服務器一樣作為另一臺http服務器的DocumentRoo…

    2017-05-02
  • vsdf

    Linux干貨 2017-10-23
  • Flex Ant自動構建

    1.  Flex SDK Ant        Flex開發者會遇到很多,比如自動構建,在一個有著N多模塊,N處源碼,構建過程復雜的Flex項目開發中,依賴人力手工構建項目非常不現實(機械重復且枯燥無味的過程,相信哪位開發人員都會避之唯恐不及,而且對于人力是非常大的浪費),而通過使用Ant,我們可以將這些工作…

    Linux干貨 2016-03-22
  • 推薦-Centos的網絡配置命令和文件

    一、ifcongfig     Centos6之前最常用的配置網絡命令就是ifconfig,使用ifconfig命令時最好切換到root用戶的身份     1、直接使用ifconfig可以查看當前配置的網絡設備的信息      &…

    Linux干貨 2016-03-27
  • LINUX-初學正則表達式

    正則表達式    簡介       REGEXP:由一類特殊字符及文本字符由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)                    不表示字符字面意義,而表示控制或通配…

    2017-06-04
欧美性久久久久