Linux如何查看和控制進程

2021-01-07 一米八是我呀

Linux如何查看和控制進程

前言:程序是保存在外部存儲介質(如硬碟)中的可執行機器代碼和數據的靜態集合,而進程是在CPU及內存中處於動態執行狀態的電腦程式。在Linux系統中,每個程序啟動後可以創建一個或多個進程。例如,提供Web服務的httpd程序,當有大量用戶同時訪問Web頁面時,httpd程序可能會創建多個進程來提供服務。

程序保存在硬碟、光碟等介質中的可執行代碼和數據

靜態保存的代碼

進程在 CPU 及內存中運行的程序代碼

動態執行的代碼

父、子進程

每個進程可以創建一個或多個進程

下面我們將一起來學習查看進程信息及控制進程相關的操作命令。

一、查看進程

使用不同的命令工具可以從不同的角度查看進程狀態。

常用的進程查看命令

1.ps命令——查看靜態的進程統計信息(Processes Statistic)

常見的選項:

a:顯示當前終端下的所有進程信息,包括其他用戶的進程。

u:使用以用戶為主的格式輸出進程信息。

x:顯示當前用戶在所有終端下的進程。

-e:顯示系統內的所有進程信息。

-l:使用長(long)格式顯示進程信息。

-f:使用完整的(full)格式顯示進程信息。

需要注意的是,有一部分選項是不帶「-」前綴的(添加「-」前綴後含義可能會有出入)。習慣上將上述選項組合在一起使用,如,「ps aux」或「ps -elf」

示例1:ps aux 將以簡單列表的形式顯示出進程信息。如下圖

上圖中的輸出信息中,第1行為列表標題,其中各欄位的含義描述如下:

USER:啟動該進程的用戶帳號名稱

PID:該進程的ID號,在當前系統中是唯一的

TTY:該進程在哪個終端上運行。「?」表未知或不需要終端

STAT:顯示了進程當前的狀態,如S(休眠)、R(運行)、Z(僵死)、<(高優先級)、N(低優先級)、s(父進程)、+(前臺進程)。對處於僵死狀態的進程應予以手動終止。

START:啟動該進程的時間

TIME:該進程佔用CPU時間

COMMAND:啟動該進程的命令的名稱

%CPU:CPU佔用的百分比

%MEM:內存佔用的百分比

VSZ:佔用虛擬內存(swap空間)的大小

RSS:佔用常駐內存(物理內存)的大小

示例2:ps -elf 以長格式顯示系統中的進程信息,包含更豐富的內容。大概意思都一樣,PPID為父進程的PID。

示例3:ps 直接執行不帶任何選項,只顯示當前用戶會話中打開的進程。

示例4:結合管道操作和grep命令進行過濾,用於查詢某一個進程的信息。

2.top命令——查看進程動態信息

以全屏交互式的界面顯示進程排名,及時跟蹤包括CPU、內存等系統資源佔用情況,默認情況下每三秒刷新一次,其作用基本類似於Windows系統中的任務管理器。

示例:

上圖中輸出信息開頭部分相關信息的含義如下:

Tasks(系統任務)信息:total,總進程數;running,正在運行的進程數;sleeping,休眠的進程數;stopped,中止的進程數;zombie,僵死無響應的進程數。CPU信息:us,用戶佔用;sy,內核佔用;ni,優先級調度佔用;id,空閒CPU;wa,I/O等待佔用;hi,硬體中斷佔用;si,軟體中斷佔用;st,虛擬化佔用。了解空閒的CPU百分比,主要看%id部分。Mem(內存)信息:total,總內存空間;used,已用內存;free,空閒內存;buffers,緩存區域。Swap(交換空間)信息:total,總交換空間;used,已用交換空間;free,空閒交換空間;cached,緩存空間。在top命令的全屏操作界面中,按P鍵根據CPU佔用情況對進程列表進行排序,或按M鍵根據內存佔用情況排序,按N鍵根據啟動時間進行排序,按h鍵可以獲得top程序的在線幫助信息,按q鍵可以正常地退出top程序。

若通過top排名工具發現某個進程CPU佔用率非常高,需要終止該進程的運行時,可以在top操作界面按k鍵,然後在列表上方將會出現「PID to kill」的提示信息,根據提示輸入指定進程的PID號並按enter鍵確認即可終止對應的進程。

(個人感覺沒必要都記得清清楚楚,了解一下吧,知道大概意思就行,用的時候拉出來看看)

3.pgrep命令——根據特定條件查詢進程PID信息

示例:

4.pstree命令——查看進程樹,以樹形結構列出進程信息

示例:

二、控制進程

1.啟動進程

進程的啟動方式:

手工啟動:由用戶手工輸入命令或執行程序的路徑,可以至少啟動一個進程。手工啟動包括:前臺啟動和後臺啟動。 前臺啟動:用戶輸入命令,直接執行程序

後臺啟動:在命令行尾加入「&」符號

示例:

後臺啟動後直接放入後臺運行,而不佔用前臺的命令操作界面,方便用戶進行其他操作。

調度啟動:用於伺服器維護工作中,例如當需要執行一些比較費時而且佔用資源的任務(如數據備份),這些任務更適合在相對空閒的時候(如夜間)執行。這時就需要用戶事先進行調度安排,指定任務運行的時間,當系統到達指定設定時間時會自動啟動並完成指定的任務。調度啟動的計劃任務進程均在後臺運行,不會佔用用戶的命令終端。調度啟動可以通過at、crontab命令進行設置。 使用 at 命令,設置一次性計劃任務

使用 crontab 命令,設置周期性計劃任務

(關於at和crontab的配置,準備下個文章再講解)

2.改變進程的運行方式

1) 掛起當前的進程

按Ctrl+Z組合鍵將當前進程掛起(調入後臺並停止運行),這種操作在需要暫停當前進程並進行其他操作時特別有用。例如,我們使用windows系統是有時候在本地計算機搜索東西時,發現他搜索的老慢了甚至電腦都有點卡,我們突然不想讓它搜了,就想馬上讓它停止搜索,就是這種感覺。

2) 查看後臺的進程

使用jobs命令,可以查看當前終端在後臺的進程任務,結合「-l」選項可以同時顯示出該進程對應的PID號

示例:

3) 將後臺的進程恢復運行

bg(BackGround)命令,可以將後臺中暫停執行(如,按Ctrl+Z組合鍵掛起)的任務恢復運行,繼續在後臺執行

fg(ForeGround)命令,可以將後臺任務重新恢復到前臺運行

示例:

3.終止進程執行

1) Ctrl+C組合鍵

強制中斷正在執行的命令,如,命令長時間沒有響應的情況下。

2) kill命令

用於終止指定PID號的進程,需要使用進程的PID號作為參數。無特定選項時,kill命令將給該進程發送終止信號並正常退出運行,有時可能該進程已經無法響應終止信號,這時可以結合「-9」(這是數字9不是字母g,有時候容易看走眼)選項強制終止進程。強制終止進程可能會導致程序運行的部分數據丟失,因此不到不得已時慎用。

示例

3) killall命令

用於終止指定名稱的所有進程,當需要結束系統中多個相同名稱的進程時,使用killall命令將更加方便,效率更高。Killall命令同樣也有「-9」選項。

示例:

4) pkill命令

根據特定條件終止相應的進程

常用選項:(大部分選項與pgrep命令基本類似)

-U:根據進程所屬的用戶名終止相應進程

-t:根據進程所在的終端終止相應進程

示例:

下一篇文章將總結如何創建計劃任務(at、crontab計劃任務)

相關焦點

  • Linux下如何掛載新磁碟:mount
    前言在linux系統伺服器上插了一個U盤,結果系統顯示不出來,是什麼原因導致了系統不能識別U盤呢?經過一番搜索,發現新的硬體設備插在linux系統上時,如果不能正常顯示,則需要通過掛載讓U盤顯示出來,這裡就用到了我們今天要介紹的命令:mount。
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    作業系統是一個用來和硬體打交道並為用戶程序提供一個有限服務集的低級支撐軟體。一個計算機系統是一個硬體和軟體的共生體,它們互相依賴,不可分割。計算機的硬體,含有外圍設備、處理器、內存、硬碟和其他的電子設備組成計算機的發動機。但是沒有軟體來操作和控制它,自身是不能工作的。完成這個控制工作的軟體就稱為作業系統,在Linux的術語中被稱為「內核」,也可以稱為「核心」。
  • 從RTOS到Linux的應用移植
    圖4 異步信號通知示意圖  在具體的程序設計過程中,上層應用為了能處理一個設備釋放的信號,要完成3項工作:① 通過F_SETOWN控制命令設置設備文件的擁有者為本進程② 通過F_SETFL控制命令設置設備文件支持FASYNC,即異步通知模式。③ 通過signal()函數連接信號和信號處理函數。
  • Linux多線程編程和Linux 2.6下的NPTL
    MFC中多線程的封裝倒是看上去像那麼一回事情了,但是我想像不出在如此簡陋的系統api上微軟到底是如何實現出MFC上線程功能的。擁護windows 的人不要在這裡砸雞蛋,最好也能寫一篇windows上的多線程介紹除了。這比砸雞蛋來得有意義多了。 好了,書歸正傳繼續說Linux上的多線程。在Linux 上,從內核角度而言,基本沒有什麼線程和進程的區別--大家都是進程。
  • 嵌入式Linux的GDB調試環境建立
    嵌入式Linux的GDB調試環境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。
  • linux系統編寫Systemd Service方法
    CentOS7.3學習筆記總結(七十)-linux系統編寫Systemd Service方法在Centos7以前的版本中,系統管理員都是通過把bash腳本放到/etc/init.d/目錄下來控制服務狀態,比如啟動start、停止stop,重啟restart等。而在CentOS7版本中,就不在採用這種方法,而是採用了Unit配置文件來管理服務。
  • 基於嵌入式Linux的語音識別系統硬軟體設計
    在嵌入式Linux作業系統下,運用多進程機制完成了對語音識別晶片、超聲波測距和雲臺的控制,並將語音識別技術應用於多角度超聲波測距系統中。通過測試,系統可以通過識別語音指令控制測量方向,無需手動幹預,最後將測量結果通過語音播放出來。
  • Linux下常用的研發工具和環境
    四、原始碼分析/查看/瀏覽工具:在當前的Linux環境中,最常用的兩種源碼分析工具為KScope和Source Navigator。其中Source Navigator功能最強,在代碼導航方面甚至超過了Windows最著名的Source Insight,但由於長久沒人維護的原因,常常無法再教訓的Linux發行版上安裝。
  • Linux下內存洩漏工具
    嵌入式linux QQ交流群:175159209,歡迎愛好者加入交流技術問題!
  • Linux下scp命令使用教程
    接下來我們登錄遠程伺服器進行查看驗證,可以看到目錄內的文件已經全部拷貝過來。下面我們介紹將本地的文件上傳到遠程伺服器上。執行命令"scp /root/node-v4.2.1-linux-x64.tar.gz root@192.168.2.105:/opt/test"。
  • Linux 下軟體安裝詳解
    下面我就詳細講解Linux下如何安裝軟體。     先來看看Linux軟體擴展名。軟體後綴為.rpm最初是Red Hat Linux提供的一種包封裝格式,現在許多Linux發行版本都使用;後綴為.deb是Debain Linux提供的一種包封裝格式;後綴為.tar.gz、tar.Z、tar.bz2或.tgz是使用Unix系統打包工具tar打包的;後綴為.bin的一般是一些商業軟體。
  • Linux基礎命令之:實驗內容及小結
    命令為:su-root(4)查看cross-3.3.2.tar.bz2所在的Windows下對應分區的格式,並記下其文件設備名稱,如「/dev/hda1」等。命令為:fdisk-l(5)使用mkdir命令在「/mnt」新建子目錄作為掛載點。命令為:mkdir/mnt/win(6)掛載Windows相應分區。
  • Linux如何安裝軟體
    rpm包安裝常用命令參數查看 rpm -qa安裝 rpm -ivh 包名卸載 rpm -e 包名http://rpm.pbone.net/是一個搜索rpm包的網站,搜索框裡查找出現搜索結果點擊第一個結果進入詳情界面,可以看到rpm包的具體信息,包括依賴以及包裡內容優點是安裝時無需配置
  • 嵌入式Linux開發環境的搭建之:嵌入式開發環境的搭建
    如優龍的FS2410開發光碟裡就附帶了2.95.3和3.3.2兩個版本的交叉編譯器,其中前一個版本是用於編譯Linux2.4內核的,而後一個版本是用於編譯Linux2.6版本內核的。由於這是廠商測試通過的編譯器,因此可靠性會比較高,而且與開發板能夠很好地吻合。所以推薦初學者直接使用廠商提供的編譯器。當然,由於時間滯後的原因,這個編譯器往往不是最新的版本,若需要更新時希望讀者另外查找相關資料學習。
  • Linux系統監控工具atop
    如上圖所示, atop 的界面分為上半部分的系統監控項和下半部分的進程列表。atop 每10s更新一次系統監控項以及在這段時間內狀態發生變化的進程,按下A鍵可以查看全部進程。>linux 中進程有兩種 sleep 狀態:interruptible sleep: 進程接收系統信號,可以被系統信號中斷uninterruptible sleep: 進程不接收系統信號,不可被系統信號中斷,包括kill -9 (SIGKILL 信號)。
  • linux下ntp時鐘同步的搭建和使用(超詳細)
    在生產和學習過程中,是一個最容易被忽略卻又很重要的協議。一、安裝NTP1、linux下NTP的安裝方式有很多種,yum、wget、rpm都可以,選擇自己習慣的方式即可,這裡不再贅述!本人習慣用rpm方式安裝,在伺服器上就需要安裝如下兩個文件。
  • linux下安裝虛擬機,完美在linux系統下運行通達信軟體
    現在越來越多的人使用linux系統,現在很多的國產作業系統都是基於linux內核上的。雖說不少的軟體都可以運行在linux的系統上。但是對於股票軟體來說在linux上的使用是一個硬傷。能夠運行在linux下的國內股票軟體少之又少。
  • Linux提權的幾種常用方式
    1.1 本地內核提權(1)檢測內核版本# 查看系統發行版本 lsb_release -a # 查看內核版本 uname -a 1.3 Linux提權輔助工具github項目地址:https://github.com/mzet-/linux-exploit-suggester.git
  • 手把手教你如何用MSF進行後滲透測試!
    本期安仔課堂,ISEC實驗室的向老師為大家介紹如何使用MSF進行後滲透測試。當meterpreter單獨作為一個進程運行時容易被發現,如果將它和系統經常運行的進程進行綁定,就能夠實現持久化。1.查看當前會話的進程id命令:getpid2.查看目標運行的進程
  • 如何在 Fedora Linux 上安裝 RPM 文件 | Linux 中國
    導讀:這篇初學者文章介紹如何在 Fedora 和 Red Hat Linux 上安裝 RPM 軟體包。它也隨後向你展示如何移除這些 RPM 軟體包。  本文字數:1835,閱讀時長大約: 2分鐘  https://linux.cn/article-12958-1.html作者:Abhishek Prakash譯者:鄭  當你開始使用 Red Hat 系的 Fedora Linux 時,你早晚會偶然發現 .rpm 文件。