Linux運維基礎進程管理及環境組成分析

 更新時間:2021年09月06日 16:27:14   作者:神慕蔡蔡  
這篇文章主要為大家介紹了Linux運維基礎,對其中進程管理及環境組成分析作了詳細的分析,有需要的朋友可以借鑒參考下,希望可以有所幫助

1.進程基本概述

進程是已啟動的可執行程序的運行中實例。

/proc目錄下以數字為名的目錄,每一個目錄代表一個進程,保存著進程的屬性信息。

每一個進程的PID是唯一的,就算進程退出了,其它進程也不會占用其PID

2.進程的組成部分

  •  已分配內存的地址空間
  • 安全屬性,包括所有權憑據和特權
  • 程序代碼的一個或多個執行線程
  • 進程狀態

3.進程的環境

  • 本地和全局變量
  • 當前調度上下文
  • 分配的系統資源,如文件描述符和網絡端口

4.進程狀態

標志 內核定義的狀態名稱和描述
R TASK_RUNNING:進程正在CPU上執行,或者正在等待運行。處于運行中(或可運行)狀態時,進程可能正在執行用戶例程或內核例程(系統調用),或者已排隊并就緒
S TASK_INTERRUPTIBLE:進程處于睡眠狀態且正在等待某一條件:硬件請求、系統資源訪問或信號。當事件或信號滿足該條件時,該進程將返回到運行中
D TASK_UNINTERRUPTIBLE:此進程也在睡眠,但與S狀態不同,不會響應傳遞的信號。僅在特定的條件下使用,其中進程中斷可能會導致意外的設備狀態
K TASK_KILLABLE:進程處于睡眠狀態,與不可中斷的D狀態相同,但有所修改,允許等待中的任務通過響應信號而被中斷(徹底退出)。實用程序通常將可中斷的進程顯示為D狀態
T TASK_STOPPED:進程已被停止(暫停),通常是通過用戶或其他進程發出的信號。進程可以通過另一信號返回到運行中狀態,繼續執行(恢復)
T TASK_TRACED:正在被調試的進程也會臨時停止,并且共享同一個T狀態標志
Z EXIT_ZOMBIE:子進程在退出時向父進程發出信號。除進程身份(PID)之外的所有資源都已釋放
X EXIT_DEAD:當父進程清理(獲取)剩余的子進程結構時,進程現在已徹底釋放。此狀態從不會在進程列出實用程序中看到
< 高優先級進程
N 低優先級進程
+ 前臺進程組中的進程
l 多線程進程
s 會話進程首進程

5.進程優先級

  • <0-139>:數字越小,優先級越高!
  • <0-99>:實時優先級,內核調整
  • <100-139>:靜態優先級,用戶可控制

6.進程管理命令

ps命令用于列出當前的進程。可以顯示詳細的進程信息

[root@localhost ~]# ps -e
    PID TTY          TIME CMD
      1 ?        00:00:02 systemd
      2 ?        00:00:00 kthreadd


[root@localhost ~]# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.6 179032 13504 ?        Ss   Nov03   0:02 /usr/lib/syst
root           2  0.0  0.0      0     0 ?        S    Nov03   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Nov03   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Nov03   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<   Nov03   0:00 [kworker/0:0H
root           8  0.0  0.0      0     0 ?        I<   Nov03   0:00 [mm_percpu_wq
root           9  0.0  0.0      0     0 ?        S    Nov03   0:00 [ksoftirqd/0]
root          10  0.0  0.0      0     0 ?        R    Nov03   0:00 [rcu_sched]
root          11  0.0  0.0      0     0 ?        S    Nov03   0:00 [migration/0]
root          12  0.0  0.0      0     0 ?        S    Nov03   0:00 [watchdog/0]
root          13  0.0  0.0      0     0 ?        S    Nov03   0:00 [cpuhp/0]
root          15  0.0  0.0      0     0 ?        S    Nov03   0:00 [kdevtmpfs]
root          16  0.0  0.0      0     0 ?        I<   Nov03   0:00 [netns]
root          17  0.0  0.0      0     0 ?        S    Nov03   0:00 [kauditd]
root          18  0.0  0.0      0     0 ?        S    Nov03   0:00 [khungtaskd]
root          19  0.0  0.0      0     0 ?        S    Nov03   0:00 [oom_reaper]
root          20  0.0  0.0      0     0 ?        I<   Nov03   0:00 [writeback]
root          21  0.0  0.0      0     0 ?        S    Nov03   0:00 [kcompactd0]
root          22  0.0  0.0      0     0 ?        SN   Nov03   0:00 [ksmd]
root          23  0.0  0.0      0     0 ?        SN   Nov03   0:00 [khugepaged]
root          24  0.0  0.0      0     0 ?        I<   Nov03   0:00 [crypto]
root          25  0.0  0.0      0     0 ?        I<   Nov03   0:00 [kintegrityd]
root          26  0.0  0.0      0     0 ?        I<   Nov03   0:00 [kblockd]
root          27  0.0  0.0      0     0 ?        I<   Nov03   0:00 [tpm_dev_wq]
root          28  0.0  0.0      0     0 ?        I<   Nov03   0:00 [md]
root          29  0.0  0.0      0     0 ?        I<   Nov03   0:00 [edac-poller]
root          30  0.0  0.0      0     0 ?        S    Nov03   0:00 [watchdogd]
root          47  0.0  0.0      0     0 ?        S    Nov03   0:00 [kswapd0]
root         140  0.0  0.0      0     0 ?        I<   Nov03   0:00 [kthrotld]
root         141  0.0  0.0      0     0 ?        S    Nov03   0:00 [irq/24-pcieh
root         142  0.0  0.0      0     0 ?        S    Nov03   0:00 [irq/25-pcieh
root         143  0.0  0.0      0     0 ?        S    Nov03   0:00 [irq/26-pcieh
root         144  0.0  0.0      0     0 ?        S    Nov03   0:00 [irq/27-pcieh
root         145  0.0  0.0      0     0 ?        S    Nov03   
[root@localhost ~]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 Nov03 ?        00:00:02 /usr/lib/systemd/systemd --s
root           2       0  0 Nov03 ?        00:00:00 [kthreadd]
root           3       2  0 Nov03 ?        00:00:00 [rcu_gp]
root           4       2  0 Nov03 ?        00:00:00 [rcu_par_gp]
root           6       2  0 Nov03 ?        00:00:00 [kworker/0:0H-k

7.vmstat

虛擬內存狀態查看命令

vmstat 1000 //表示每1000秒刷新一次
vmstat 1000 5 //表示每1000秒刷新一次,刷新5次后退出

[root@localhost ~]# vmstat 1000
procs:
    r(running)  //表示等待運行的隊列長度,也即等待運行的進程的個數
    b(block)    //表示阻塞隊列長度,也即處于不可中斷睡眠態的進程個數
memory:
    swpd        //交換內存的使用總量
    free        //空閑物理內存總量
    buffer      //用于buffer的內存總量
    cache       //用于cache的內存總量
swap:
    si(swap in)     //表示從物理內存有多少頁面換進swap,也即數據進入swap的數據速率(kb/s)
    so(swap out)    //表示從swap有多少頁面換進物理內存,也即數據離開swap的數據速率(kb/s)
io:
    bi(block in)    //表示磁盤塊有多少個被調入內存中,也即從塊設備讀入數據到系統的速率(kb/s)
    bo(block out)   //表示有多少個磁盤塊從內存中被同步到硬盤上去了,也即保存數據至塊設備的速率(kb/s)
system:
    in( interrupts)     //表示中斷的個數,也即中斷速率(kb/s)
    cs(context switch)  //表示上下文切換的次數,也即進程切換速率(kb/s)
CPU:
    us      //表示用戶空間
    sy      //表示內核空間
    id      //表示空閑百分比
    wa      //表示等待IO完成所占據的時間百分比
    st      //表示steal,被虛擬化技術偷走的時間(比如運行虛擬機)

8.后臺運行作業

//在命令后跟上&符號可以生成一個后臺作業
[root@localhost ~]# sleep 1000 &
[1] 1400
//jobs命令用于顯示當前所有的后臺作業
[root@localhost ~]# jobs
[1]+  Running                 sleep 1000 &
//fg命令用于將后臺作業調至前臺運行
[root@localhost ~]# fg
//當只有一個后臺作業時,直接使用fg命令,不跟任何參數即可將后臺作業調至前臺運行,但是當有多個作業時則必須跟上%+作業號,也就是上面命令執行結果中以[]括起來的數字。
[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
[root@localhost ~]# fg %1
//使用ctrl+z可將前臺進程發送到后臺,此時作業將處于停止狀態
[root@localhost ~]# fg %1
sleep 1000
^Z
[1]+  Stopped                 sleep 1000
//使用bg命令+作業號可使后臺已停止的作業重新運行
[root@localhost ~]# bg %1
[1]+ sleep 1000 &
[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
//kill加上作業號可以手動殺死指定作業
[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
[root@localhost ~]# kill %1
[1]-  Terminated              sleep 1000
[root@localhost ~]# jobs
[2]+  Running                 sleep 500 &
//jobs命令的結果中
    +       //命令將默認操作的作業
    -     //命令將第二個默認操作的作業

以上就是Linux運維基礎進程管理及環境組成分析的詳細內容,更多關于Linux進程管理及環境組成的資料請關注腳本之家其它相關文章!

相關文章

  • 如何在Centos 7快速開啟端口

    如何在Centos 7快速開啟端口

    最近將CentOS升級到7之后,發現無法使用iptables控制Linuxs的端口,google之后發現Centos 7使用firewalld代替了原來的iptables。下面這篇文章將給大家介紹如何在Centos 7中使用firewalld快速開發端口,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • Nginx出現500 Internal Server Error 錯誤的解決方案

    Nginx出現500 Internal Server Error 錯誤的解決方案

    這篇文章主要介紹了Nginx出現500 Internal Server Error 錯誤的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Linux監視進程之ps命令詳解

    Linux監視進程之ps命令詳解

    ps命令日常工作中最常用的命令行工具之一了,每天敲了那么多次的ps,你真的了解你的命令行輸出信息中的每一行含義嗎?下面這篇文章主要給大家詳細介紹了Linux中監視進程之ps命令,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • 詳解SSH 遠程執行任務的方法

    詳解SSH 遠程執行任務的方法

    本篇文章主要介紹了詳解SSH 遠程執行任務的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • linux ssh 使用深度解析(key登錄詳解)

    linux ssh 使用深度解析(key登錄詳解)

    這篇文章主要介紹了linux ssh 使用深度解析(key登錄詳解),需要的朋友可以參考下
    2015-07-07
  • 用DNSPod和Squid打造自己的CDN (七) 配置Squid

    用DNSPod和Squid打造自己的CDN (七) 配置Squid

    首先我們要明白一下squid在CDN中扮演的角色。squid在CDN中其實只是一個代理+緩存。跟一般的代理服務器類似,squid代替用戶向真正有內容的服務器進行請求,并且緩存下來
    2013-04-04
  • 淺談Linux下免密碼切換到root用戶當注意的問題

    淺談Linux下免密碼切換到root用戶當注意的問題

    下面小編就為大家帶來一篇淺談Linux下免密碼切換到root用戶當注意的問題。小編覺得挺不錯的。現在就分享給大家。也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Openssl實現雙向認證教程(附服務端客戶端代碼)

    Openssl實現雙向認證教程(附服務端客戶端代碼)

    這篇文章主要介紹了Openssl實現雙向認證教程(附服務端客戶端代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • windows中apache 301頁面跳轉實現方法

    windows中apache 301頁面跳轉實現方法

    下面我們來總結windows中apache 301頁面跳轉實現方法,目前最主流的有二種一種是在寫.htaccess文件方法
    2013-01-01
  • 解決-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 權限不夠問題

    解決-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 權限不夠問題

    這篇文章主要介紹了解決-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 權限不夠的問題,需要的朋友可以參考下
    2019-09-09

最新評論

精品国内自产拍在线观看