Linux-進程的觀察

来源:https://www.cnblogs.com/AganRun/archive/2019/12/22/12078979.html
-Advertisement-
Play Games

16.1.1 進程與程式 ·程式 (program):通常為 binary program ,放置在儲存媒體中 (如硬碟、光碟、軟盤、磁帶等), 為實體文 件的型態存在; ·進程 (process):程式被觸發後,執行者的許可權與屬性、程式的程式代碼與所需數據等都會被載入記憶體中, 操作系統並給予這個內 ...


16.1.1 進程與程式

 

  • ·程式 (program):通常為 binary program ,放置在儲存媒體中 (如硬碟、光碟、軟盤、磁帶等), 為實體文 件的型態存在;
  • ·進程 (process):程式被觸發後,執行者的許可權與屬性、程式的程式代碼與所需數據等都會被載入記憶體中, 操作系統並給予這個記憶體內的單元一個標識符 (PID),可以說,進程就是一個正在運作中的程式

 

第一個 bash 的 PID 與第二個 bash 的 PPID 都是 13928 啊, 因為第二個 bash 是來自於第一個所產生的嘛!

 

常駐在記憶體當中的進程通常都是負責一些系統所提供的功能以服務用戶各項任務,因此這些常駐程式 就會被我們稱為:服務 (daemon)。所以,一般 daemon 類型的程式都會加上 d 在文件名後頭~包括伺服器篇我們會看到的 httpd, vsftpd。

 

16.3.1 進程的觀察

 

ps :將某個時間點的進程運作情況擷取下來。

 

[root@study ~]# ps aux <==觀察系統所有的進程數據 

[root@study ~]# ps -lA <==也是能夠觀察所有系統的數據 

[root@study ~]# ps axjf <==連同部分進程樹狀態

  

  

 

選項與參數:

-A :所有的 process 均顯示出來,與 -e 具有同樣的效用;

-a :不與 terminal 有關的所有 process ;

-u :有效使用者 (effective user) 相關的 process ;

x :通常與 a 這個參數一起使用,可列出較完整信息。

輸出格式規劃:

l :較長、較詳細的將該 PID 的的信息列出;

j :工作的格式 (jobs format)

-f :做一個更為完整的輸出。

 

常用的:

一個是只能查閱自己 bash 進程的『 ps -l 』

一個則是可 以查閱所有系統運作的進程『 ps aux 』!

 

[agan@localhost root]$ ps -l 
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 
4 S 1000 1971 1970 0 80 0 - 28862 do_wai pts/0 00:00:00 bash
0 R 1000 2013 1971 0 80 0 - 38312 - pts/0 00:00:00 ps

 

 

S:代表這個進程的狀態 (STAT),主要的狀態有:

  • § R (Running):該程式正在運作中;
  • § S (Sleep):該程式目前正在睡眠狀態(idle),但可以被喚醒(signal)。
  • § D :不可被喚醒的睡眠狀態,通常這支程式可能在等待 I/O 的情況(ex>列印)
  • § T :停止狀態(stop),可能是在工作控制(背景暫停)或除錯 (traced) 狀態;
  • § Z (Zombie):僵屍狀態,進程已經終止但卻無法被移除至記憶體外。
  • PRI/NI:Priority/Nice 的縮寫,代表此進程被 CPU 所執行的優先順序,數值越小代表該進程越快被 CPU 執行
  • ADDR/SZ/WCHAN:都與記憶體有關,ADDR 是 kernel function,指出該進程在記憶體的哪個部分,如果是個 running 的進程,一般就會顯示『 - 』 / SZ 代表此進程用掉多少記憶體 / WCHAN 表示目前進程是否運作中, 同樣的, 若為 - 表示正在運作中。
  • TIME:使用掉的 CPU 時間,註意,是此進程實際花費 CPU 運作的時間,而不是系統時間;

 

[agan@localhost root]$ ps aux 
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 127952 6516 ? Ss 05:01 0:01 /usr/lib/systemd/systemd --switched-root --system --d root 2 0.0 0.0 0 0 ? S 05:01 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 05:01 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 05:01 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 05:01 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 05:01 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 05:01 0:00 [rcu_sched]

 

 

  • § VSZ :該 process 使用掉的虛擬記憶體量 (Kbytes)
  • § RSS :該 process 占用的固定的記憶體量 (Kbytes)
  • § TTY :該 process 是在那個終端機上面運作,若與終端機無關則顯示 ?,另外, tty1-tty6 是本機上面的登 入者進程,若為 pts/0 等等的,則表示為由網路連接進主機的進程。
  • § STAT:該進程目前的狀態,狀態顯示與 ps -l 的 S 旗標相同 (R/S/T/Z)

 

top:動態觀察進程的變化

[root@localhost ~]# top [-d 數字] | top [-bnp]
  • -b :以批次的方式執行 top ,還有更多的參數可以使用喔! 通常會搭配數據流重導向來將批次的結果輸出成為文件。
  • -n :與 -b 搭配,意義是,需要進行幾次 top 的輸出結果。
  • -p :指定某些個 PID 來進行觀察監測而已。

在 top 執行過程當中可以使用的按鍵指令:

  • ? :顯示在 top 當中可以輸入的按鍵指令;
  • P :以 CPU 的使用資源排序顯示;
  • M :以 Memory 的使用資源排序顯示;
  • N :以 PID 來排序喔!
  • T :由該 Process 使用的 CPU 時間累積 (TIME+) 排序。
  • k :給予某個 PID 一個訊號 (signal)
  • r :給予某個 PID 重新制訂一個 nice 值。
  • q :離開 top 軟體的按鍵。

 

top - 17:53:08 up 12:51, 2 users, load average: 0.00, 0.00, 0.00 
Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie 
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 
KiB Mem : 1863104 total, 1569792 free, 142924 used, 150388 buff/cache 
KiB Swap: 2097148 total, 2097148 free, 0 used. 1561264 avail Mem 
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
1 root 20 0 127952 6516 4104 S 0.0 0.3 0:01.36 systemd 
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 
6 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0 
7 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 
9 root 20 0 0 0 0 S 0.0 0.0 0:00.74 rcu_sched 
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.26 watchdog/0 
12 root rt 0 0 0 0 S 0.0 0.0 0:00.36 watchdog/1

  

  

 

依次顯示信息:

1->當前時間、開機時間、同時使用用戶數,系統在 1, 5, 15 分鐘的平均工作負載。

2->顯示的是目前進程的總量與個別進程在什麼狀態(running, sleeping, stopped, zombie)

3->顯示的是 CPU 的整體負載

4、5->表示目前的物理記憶體與虛擬記憶體 (Mem/Swap) 的使用情況

6->輸入指令,顯示狀態的地方

 

範例二:將 top 的信息進行 2 次,然後將結果輸出到 /tmp/top.txt 
[root@study ~]# top -b -n 2 > /tmp/top.tx

 

範例三:我們自己的 bash PID 可由 $$ 變數取得,請使用 top 持續觀察該 PID 
[root@study ~]# echo $$ 14836 <==就是這個數字!他是我們 bash 的 PID
[root@study ~]# top -d 2 -p 14836 top - 01:00:53 up 6:14, 3 users, load average: 0.00, 0.01, 0.05 
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie %Cpu(s):0.0 us, 0.1 sy, 0.0 ni, 99.9 id, KiB Mem : 2916388 total, 1839264 free, 0.0 wa, 0.0 hi, 353424 used, 0.0 si, 0.0 st 723700 buff/cache 
KiB Swap: 1048572 total, 1048572 free, 0 used. 2318848 avail Mem
 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
14836 root 20 0 116272 3136 1848 S 0.0 0.1 0:00.07 bash

 

如果覺得記憶體以KB為單位不方便監控,可以按下E,則分別以KB、MB、GB、TB、PB、EB單位顯示

 


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

-Advertisement-
Play Games
更多相關文章
  • Mbp(https://github.com/mbpframework/Mbp)是一個.net core 3的企業級web開發框架,是我個人用於學習.net core而發起的一個開源項目.這個借鑒了國外優秀開源項目abp vnext,及國內優秀開源框架Osharp的一些思想和實現.歡迎各路開發愛好者 ...
  • [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetSetCookie(string lpszUrlName, string lbszCoo ...
  • DATASET 可以理解為是個資料庫。 DATATABLE 可以理解為是個數據表。 DATAVIEW 可以理解為是表的視圖。 dataset 數據集合可以包含多個datatable,而datatable可以聲明多個dataview。dataview是個虛擬的視圖,用於數據展示層,可以通過對它的Row ...
  • “作為 ASP.NET Core 開發者,我接下來應該學習什麼?”,下麵將介紹需要學習的東西,其中包括:依賴註入、資料庫、緩存、日誌、模板引擎、實時通信、測試、任務調度、設計模式等。 免責聲明 該指南的目的是為了給讀者心有個大概的輪廓。如果你對接下來要學習的內容感到困惑,這張路線圖將指導你,而不是鼓 ...
  • 接下來我們在 Centos7 系統下使用 yum 命令安裝 MySQL,需要註意的是 CentOS 7 版本中 MySQL資料庫已從預設的程式列表中移除,所以在安裝前我們需要先去官網下載 Yum 資源包: 使用yum安裝mysql: 啟動mysql,並查看mysql運行狀態: 安裝成功,找出mysq ...
  • 引言 具體不記得是在群里還是什麼地方有人問過,.NETCore有沒有漢化包,答案是有,目前微軟已經為我們提供了.NETCore多種語言的語言包。下麵看看如何安裝與使用吧。 本文介紹: 如何安裝這些下載的本地化版本。 如何修改Visual Studio安裝以使用其他語言。 先決條件 .NET Core ...
  • 簡介 LiteByte是一種輕量級的二進位數據交換格式。體積小巧、簡單易用是設計目標。主要用於解決前後臺數據傳輸量的問題。 作者:冰封百度(ZhangYu)設計的靈感來源於C# struct記憶體對齊後的緊湊格式。暫時只實現了C#版本。 特點 1.緊湊的二進位數據格式,支持變長整型,數據量小。2.用近 ...
  • 在上一篇文章abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之四(三十) 中我們實現了新增組織部門信息功能,不過還存在一些BUG,如下圖。“自動展開和子級”沒有顯示,“上級組織”下拉框中沒有數據顯示。今天我們來繼續完善組織部門信... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...