linux系統管理-進程管理

来源:https://www.cnblogs.com/1naonao/archive/2019/07/22/11226449.html
-Advertisement-
Play Games

[toc] linux系統管理 進程管理 程式和進程的區別 1.程式是數據和指令的集合,是一個靜態的概念,比如/bin/ls、/bin/cp等二進位文件,同時程式可以長期存在系統中。 2.進程是一個程式的運行過程,是一個動態概念,進程是存在生命周期概念的,也就是說進程會隨著程式的終止而銷毀,不會永遠 ...


目錄

linux系統管理-進程管理

程式和進程的區別

1.程式是數據和指令的集合,是一個靜態的概念,比如/bin/ls、/bin/cp等二進位文件,同時程式可以長期存在系統中。

2.進程是一個程式的運行過程,是一個動態概念,進程是存在生命周期概念的,也就是說進程會隨著程式的終止而銷毀,不會永遠在系統中存在。

進程的生命周期

img

程式運行是進程的狀態關係

1.當父進程接收到任務調度時,會通過fork派生子進程來處理,那麼子進程會集成父進程的衣缽。
2.子進程在處理任務代碼時,父進程會進入等待的狀態...
3.如果子進程在處理任務過程中,父進程退出了,子進程沒有退出,那麼這些子進程就沒有父進程來管理了,就變成了僵屍進程。
4.每個進程都會有自己的PID號,(process id)子進程則PPID

進程狀態管理命令(靜態)

使用ps命令查看當前的進程狀態(靜態查看)

常用組合:ps aux 查看進程

[root@zls ~]# ps aux
a:顯示所有與終端相關的進程,由終端發起的
u:顯示用戶導向的用戶列表
x:顯示所有與終端無關的進程

在多任務處理操作系統中,每個CPU(或核心)在一個時間點上只能處理一個進程。
在進程運行時,它對 CPU 時間和資源分配的要求會不斷變化,從而為進程分配一個狀態,它隨著環境要求而改變。

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
USER:       //啟動程式的用戶
PID:        //進程ID
%CPU:       //占用CPU的百分比
%MEM:       //占用記憶體的百分比
VSZ:        //虛擬記憶體集(進程占用虛擬記憶體的空間)
RSS:        //物理記憶體集(進程占用物理記憶體的空間)

TTY:        //運行的終端
        ?:      #內核運行的終端
        tty1:   #機器運行的終端
        pts/0:  #遠程連接的終端

STAT:       //進程狀態
        D:      #無法中斷的休眠狀態(通IO的進程)
        R:      #正在運行的狀態
        S:      #處於休眠的狀態
        T:      #暫停或被追蹤的狀態
        W:      #進入記憶體交換(從內核2.6開始無效)
        X:      #死掉的進程(少見)
        Z:      #僵屍進程
        <:      #優先順序高的進程
        N:      #優先順序較低的進程
        L:      #有些頁被鎖進記憶體
        s:      #父進程(在它之下有子進程開啟著)
        +:      #該進程運行在前臺
        
        l:      #以線程的方式運行
        |:      #多進程的
        
START:      //進程被觸發開啟的時間
TIME:       //該進程實際使用CPU的運行時間
COMMAND:    //命令的名稱和參數
        [] :     #內核態的進程
        沒[]:    #用戶態的進程

進程的相關命令

#對進程的CPU進行排序展示
[root@zls ~]# ps aux --sort %cpu |less

#對進程的占用物理記憶體排序
[root@zls ~]# ps aux --sort rss |less

#排序,是在記不住,那就自己排序
[root@zls ~]# ps aux|sort -k3 -n

#自定義顯示欄位
[root@zls ~]# ps axo user,pid,ppid,%mem,command |grep sshd
root        869      1  0.2 /usr/sbin/sshd -D
root       1194    869  0.2 sshd: root@pts/0
root       1307    869  0.2 sshd: root@pts/1
root       1574    869  0.2 sshd: root@pts/2

#顯示進程的子進程
[root@zls ~]# yum install nginx -y
[root@zls ~]# systemctl start nginx
[root@zls ~]# ps auxf|grep [n]ginx
root       2033  0.0  0.1 125096  2112 ?        Ss   13:29   0:00 nginx: master process /usr/sbin/nginx
nginx      2034  0.0  0.1 125484  3148 ?        S    13:29   0:00  \_ nginx: worker process

#查看指定進程PID
[root@zls ~]# ps aux|grep sshd
root       1157  0.0  0.1 105996  3604 ?        Ss   Feb27   0:00 /usr/sbin/sshd -D
[root@zls ~]# cat /run/sshd.pid
1157

#pgrep常用參數, -l -a
[root@zls ~]# pgrep sshd
869
1194
1307
1574
[root@zls ~]# pgrep -l sshd
869 sshd
1194 sshd
1307 sshd
1574 sshd
[root@zls ~]# pgrep -l -a sshd
869 /usr/sbin/sshd -D
1194 sshd: root@pts/0
1307 sshd: root@pts/1
1574 sshd: root@pts/2

#查看進程的pid
[root@zls ~]# pidof sshd
1574 1307 1194 869

#查看進程樹 
[root@zls ~]# pstree

動態進程監控(top)

top前兩行內容解析

第一行內容:
        當前系統時間      伺服器運行時間         有3個用戶在登錄        
top -   10:54:23            up 1 day, 17:56,   3 users,  

#平均負載(系統)     1分鐘   5分鐘      15分鐘
load average:                0.00,    0.01,       0.05

第二行內容:
總共122個任務        1個正在運行(R)   121個進入睡眠狀態的(S)      沒有停止(T)Tasks: 122 total,     1 running,             121 sleeping,          0 stopped, 
0個僵屍進程(Z)
0 zombie

第三行內容

          用戶態   內核態   優先順序    空閑    等待(wait)     硬中斷     軟中斷  %Cpu(s):  0.1 us,  0.1 sy,   0.0 ni, 99.8 id,  0.0 wa,       0.0 hi,    0.0 si,
虛擬機占用物理機CPU的百分比
0.0 st

第四行:記憶體

KiB Mem :  2028116 total,   150780 free,   144108 used,  1733228 buff/cache

第五行:swap虛擬記憶體

KiB Swap:  2097148 total,  2097148 free,        0 used.  1645080 avail Mem 

第六行

 PID   USER    PR  NI    VIRT      RES       SHR    S      %CPU      %MEM     
進程號  用戶    優先順序   虛擬記憶體 物理記憶體 共用記憶體  狀態  占CPU百分比 占記憶體百分比
TIME+    COMMAND 
運行時間  進程的運行命令

中斷:硬中斷

中斷是系統用來影響硬體設備請求的一種機制,它會打斷進程的正常調度和執行,然後調用內核中的終端處理程式來影響設備的請求。

軟中斷:

事實上,為瞭解決中斷處理程式執行過長的和丟失中斷的問題,Linux將中斷處理過程分成了兩個階段:
第一階段:用來快速處理(硬中斷)中斷,它在中斷禁止模式下運行,主要處理跟硬體緊密相關工作
第二階段:用來延遲處理第一階段未完成的工作,通常以內核線程的方式運行。

例如:

第一階段:當你接到第一個配送員電話時,你可以跟他說,你已經知道了,其他事見面再細說,然後就可以掛斷電話了。

第二階段:才是取外賣,然後見面聊發票的處理動作。

如此一來,第一個配送員不會在電話里占用你很長時間,第二個配送員來的時候,照樣可以打通電話。

top命令的使用

[root@zls ~]# top
#指定N秒變化時間
[root@zls ~]# top -d 1
#查看指定進程的動態信息
[root@zls ~]# top -d 1 -p 10126
[root@zls ~]# top -d 1 -p 10126,1
#查看指定用戶的進程
[root@zls ~]# top -d 1 -u apache
#將 2 次 top 信息寫入到文件
[root@zls ~]# top -d 1 -b -n 2 > top.txt

top 常見指令
h   查看幫出
z   高亮顯示
1   顯示所有CPU的負載
s   設置刷新時間
b   高亮現實處於R狀態的進程
M   按記憶體使用百分比排序輸出
P   按CPU使用百分比排序輸出
R   對排序進行反轉
f   自定義顯示欄位
k   kill掉指定PID進程
W   保存top環境設置 ~/.toprc
q   退出

信號管理進程(kill)

當程式運行為進程後,如果希望強行停止就可以使用kill命令對進程發送關閉信號,除了kill還有pkill、killall

定義守護進程的角色
結束用戶會話和進程

[root@zls ~]# kill -l //列出所有支持的信號

//常見信號列表:
數字信號        信號別名        作用
1       HUP     掛起信號,往往可以讓進程重新配置
2       INT     中斷信號,起到結束進程的作用,和ctrl + c 的作用一樣
3       QUIT        讓進程退出,結果是進程退出
9       KILL        直接結束進程,不能被進程捕獲
15      TERM        進程終止,這是預設信號
18      CONT        被暫停的進程將繼續恢復運行
19      STOP        暫停進程
20      TSTP        用戶停止請求,作用類似於ctrl + z 把進程放到後臺並暫停

kill命令發送指令

// 給 vsftpd 進程發送信號 1,15
[root@zls ~]# yum -y install vsftpd
[root@zls ~]# systemctl start vsftpd
//發送重啟信號,例如 vsftpd 的配置文件發生改變,希望重新載入
[root@zls ~]# kill -1 9160
//發送停止信號,vsftpd 服務有停止的腳本 systemctl stop vsftpd
[root@zls ~]# kill 9160

// 給vim進程發送信號 9,15
[root@zls ~]# touch file1 file2 
//使用遠程終端1打開file1
[root@zls ~]# tty
/dev/pts/1
[root@zls ~]# vim file1
//使用遠程終端2打開file2
[root@zls ~]# tty 
/dev/pts/2
[root@zls ~]# vim file2
//查看當前進程pid
[root@zls ~]# ps aux |grep vim
root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1 
root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2
//發送15信號
[root@zls ~]# kill 4362
//發送9信號
[root@zls ~]# kill -9 4363
//還可以同時給所有vim進程發送信號, 模糊匹配,同時給多個進程發送信號
[root@zls ~]# killall vim

//使用pkill踢出從遠程登錄到本機的用戶, pkill  類似killall
[root@zls ~]# w
 20:50:17 up 95 days,  9:30,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
xuliangw pts/0    115.175.115.39   20:22    0.00s  0.01s  0.00s sshd: zls [priv]

//終止 pts/0上所有進程, 除了bash本身
[root@zls ~]# pkill -t pts/0
//終止pts/0上所有進程, 並且bash也結束(用戶被強制退出)
[root@zls ~]# pkill -9 -t pts/0

//列出zls用戶的所有進程,-l輸出pid
[root@linux-zls ~]# pgrep -l -u zls
32206 sshd
32207 bash

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ORM框架(持久化流程) session是事務 (transaction) 的工廠,處理session後,所有更改將自動刷新到資料庫中。或者,如果要處理何時將更改刷新到資料庫,即transaction將在session處理完後非同步提交。session也可以取消事務。 新建兩個項目,Data 與 Da ...
  • .NET Core CSharp 初級篇 1 5 本節內容類的介面、枚舉、抽象 簡介 問題 如果你需要表示星期或者是某些狀態,使用字元串或者數字是否不直觀? 你是否發現,無論何種電腦,它的USB口的設計都是遵循一定規範的? 枚舉 枚舉(enum)是一個非常好用的一個特殊值類型,他可以讓你指定一系列字 ...
  • 微軟和社區已經做了大量艱苦的工作,使.Net Core成為市場上具有競爭力的框架,幫助開發人員快速開發具有最佳性能和可擴展性的強大應用程式。做的最棒的事情是.Net Framework開發人員不需要任何新知識來處理.Net Core。這也是開發人員在很短的時間內採用.Net Core的原因之一。對於 ...
  • 1. "HttpResponseMessage" 2. "IHttpActionResult" 3. "void" 4. "某些其他類型" 5. "總結歸納" 原文地址:https://www.cnblogs.com/xgzh/p/11208611.html HttpResponseMessage ...
  • 轉自:Window系統命令行調用控制面板程式 ...
  • 常用命令 一、命令的基本格式 1、命令的提示符 : 這是提示符的分隔符號,沒有特殊含義 : 顯示的是當前的登錄用戶 : 分隔符號,沒有特殊含義 : 當前系統的簡寫主機名(完整主機名是 localhost.localdomain), 查看 : 代表當前所在的目錄的最後一層目錄, : 命令提示符。超級用 ...
  • 一、Linux常見命令 file:查看文件類型(windows用擴展名識別文件類型) 語法:file [options] [args] -b:顯示結果時,不顯示文件名 -c:顯示執行file命令的執行過程(file是如何判斷文件類型),便於排錯或分析命令執行過程 -i:輸出MIME類型的字元串 -L ...
  • /binbin是binary的縮寫。這個目錄沿襲了UNIX系統的結構,存放著使用者最經常使用的命令。例如cp、ls、cat,等等。 /boot這裡存放的是啟動Linux時使用的一些核心文件。 /devdev是device(設備)的縮寫。這個目錄下是所有Linux的外部設備,其功能類似DOS下的.sy ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...