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