1-10:学习shell之进程
文章目錄
- 前言
- 一:進程如何工作
- (1)使用ps命令查看進程信息
- (2)使用top命令查看資源管理器
- 二:控制進程
- (1)中斷進程
- (2)使進程在后臺運行
- (3)fg-使進程回到前臺運行
- (4)暫停進程
- 三:信號
- A:使用kill命令發送信號到進程
- B:使用killall命令發送信號給多個進程
前言
進程可以說是Linux中非常重要的概念了,關于進程一些核心概念大家可以移步,在這篇文章中詳細查看
Linux進程
本章需要用到的命令如下
- ps:顯示當前所有進程的運行情況
- top:相當于資源管理器
- jobs:列出所有活動作業的狀態信息
- bg:設置在后臺中運行作業
- fg:設置在前臺中運行作業
- kill:發送信號給某個進程
- killall:殺死指定名字的進程
- shutdown:關機或重啟系統
一:進程如何工作
系統啟動時,內核先把它的一些程序初始化為進程,然后運行一個稱為init的程序。init程序依次運行一系列稱為腳本初始化(init script)的shell腳本(存放于etc目錄下),這些腳本將會啟動所有系統服務。其中的很多服務都是通過守護程序(daemon program)來實現的。而后臺程序只是呆在后臺做他們自己的事情,并且沒有用戶界面。所以即使用戶沒有登錄,系統也在忙于執行一些例行程序
內核會保存每個進程的信息以便確保任務有序進行,比如每個進程都將分配一個稱為進程ID(PID)的號碼。進程ID是按照遞增的順序分配的,init進程始終是1。
(1)使用ps命令查看進程信息
如果直接輸入ps命令,將會輸出和當前終端會話相關的進程信息
- TTY代表了進程的控制終端
- TIME表示了進程消耗CPU的時間總和
如果在ps后面跟上選項x,也就是ps x,表示告知ps命令顯示所有的進程無需關注他們是由哪個終端控制的(因為有可能有多個用戶在使用電腦,所以TTY顯示為問號)
- 上圖中,多列出一個選項STAT,它是state的縮寫,表示了進程狀態。關于進程狀態我在前言的那篇文章中也做了深入的探究。
還有一個常用的選項是aux,也就是ps aux,該選項會輸出每個用戶的進程信息,并且輸出的信息更加豐富
- 上圖中,列表標題的含義如下
(2)使用top命令查看資源管理器
top命令相較于ps命令而言,top可以動態顯示進程的信息,默認每3s更新一次
它主要查看的是最高進程的運行狀況
- 整張圖分為兩個部分,上半部分顯示的是系統總體狀態信息,下半部分顯示的是一張按照CPU活動排序的進程情況表
其中系統總體狀態信息顯示的內容非常有用,主體注解與參考如下(標號對應)
top命令類似于Windows中的資源管理器,但是它是由于資源管理器的,大家可能有這樣的體會,一打開資源管理器CPU的占用率就會直線上升。
二:控制進程
為了方便演示,我們在終端中輸入xlogo,xlogo是由X窗口系統提供的一個實例程序,它簡單地顯示了一個包含X標識的可縮放窗口
(1)中斷進程
X窗口打開的情況下,可以發現終端的shell提示符并沒有返回,那是因為這個進程正在運行當中。如果在終端中輸入Ctrl+C,那么這個進程將會被終端,并且shell提示符返回
- 需要注意后臺進程是無法用這種方式終端的,這一點后面會講到
(2)使進程在后臺運行
可以發現在xlogo運行期間,我們是無法對終端進行其他操作的,所以如果想要讓進程不要在前臺運行,可以在命令后面加入&,也即是xlogo &,這樣的話進程將會轉到后臺運行,效果就是我們仍然能在終端中輸入其他命令
大家還可以發現另外有趣的一點:當把輸入xlogo &后,終端顯示了【1】4467這樣的字樣,這種表現其實專業術語叫做shell的作業控制,轉到后臺后,shell會告訴你已經啟動作業編號【1】,對應PID為4467
如果輸入ps命令,可以發現除了前面講過的那兩條基本進程外,此時還多了一個咋們剛才轉到后臺運行的xlogo進程,而且其PID恰好就是4467
如果想要查看由該終端啟動的所有作業(也就是后臺進程),可以輸入jobs
(3)fg-使進程回到前臺運行
后臺運行的程序是無法使用Ctrl+C中斷的。如果要使得后臺進程轉到前臺運行,可以使用fg命令,在fg后面加上百分號和作業編號,也就是fg %1
(4)暫停進程
前臺啟動xlogo后,如果此時按下Ctrl+Z,那么進程將被暫停,同時終端提示已停止,該進程會被轉到后臺
三:信號
使用kill命令可以殺死一個進程,尤其是殺死那些不正常的拒絕終止的程序
但是kill命令的用法并不只是這么簡單,準確點來說kill的含義是發送信號給進程,使用kill -l可以發現kill可以發送的信號有這么多
A:使用kill命令發送信號到進程
kill的基本用法就是kill -信號代碼 PID
眾多信號中,最為常用的是以下幾種
- 需要注意kill -9,這種終止進程的方式屬于“無奈之舉”,當進程以這種方式被終止時,它將沒有機會對自己進行清理或保存工作。下面的這張漫畫很形象的說明了它
B:使用killall命令發送信號給多個進程
使用killall命令可以給指定程序或者指定用戶名的多個進程發送信號,格式為killall -user -signal name
總結
以上是生活随笔為你收集整理的1-10:学习shell之进程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux《命令行大全》——前言
- 下一篇: todo:过几天熟悉下Github