linux(centOS7)的基本操作(六) 進程管理


進程的概念

1. 在linux系統中,每一段執行的程序都稱為一個進程,被分配一個進程編號(id)。

2. 每個進程都對應一個父進程,一個父進程可以復制多個子進程。

3. 一個進程可能以兩種方式存在:前台和后台。前台是指用戶在屏幕上可以進行操作的,后台是指屏幕上看不到的實際操作。

4. 一般系統的服務都是以后台進程的方式存在,並且常駐系統中,直到關機才結束。

 

進程操作命令

1. 查看正在執行的所有進程

ps [-aux] [| more]

其中,-a表示顯示當前所有進程,-u表示以用戶格式顯示進程,-x表示顯示進程運行的參數。

上述三個參數一般都是要使用的。如果想分頁顯示,后面加 | more。

2. 根據命令查詢特定的進程

ps -aux | grep instruction [| more]

其中,instruction為命令名稱。例如,要查看正在執行的sshd進程,ps -aux | grep sshd。

3. 查看進程及其父進程

ps -ef [| more]

該命令會以全格式顯示當前所有進程,比上述命令多一行PPID,即父進程的id。

例如,要查詢sshd進程的父進程,ps -ef | grep sshd。

4. 終止進程

kill [-9] pid

其中,pid為要終止的進程編號;-9表示強制終止,用於某些核心進程(例如終端bash)。

5. 批量終止進程

killall pname

其中,pname為進程名稱,支持通配符,這在系統因執行多個同類型進程變慢時很有用。

6. 以樹狀結構顯示當前進程

pstree [-pu]

其中,-p表示顯示進程編號,-u表示顯示進程所屬的用戶。如下圖所示:

7. 動態監控進程

top [-i] [-d n] [-p pid]

交互操作:P(按占用cpu比例排序)、M(按占用內存排序)、N(按進程編號排序)、u(只監控某個用戶)、k(結束進程)、q(退出)。

這個命令跟ps很相似,區別是可以定時(默認3秒)刷新,支持交互操作。其中,-i表示只顯示正在運行的進程;-d用於指定刷新時間間隔(n秒);-p用於指定進程編號,只監控編號為pid的進程。

 

進程操作示例

1. 踢掉某個非法登錄的用戶

(1)查詢正在執行的sshd進程:ps -aux | grep sshd。

(2)將正在登錄的dubhlinn用戶踢掉,即終止進程19477:kill 19477。

(3)dubhlinn用戶會被強制退出,並提示:Connection to xxx closed by remote host.

2. 批量關閉已經打開的多個gedit編輯器

killall gedit

3. 強制關閉終端

(1)查詢已經打開的終端:ps -ef | grep bash

(2)關閉用戶dubhlinn的終端:kill 20642,發現沒有反應,因為終端是重要進程,會繞開kill命令,必須強制關閉。

kill -9 20642,終端被關閉。

 

進程列表簡介

通過ps -aux命令可以以列表形式顯示當前進程的詳細信息,那么這些列代表什么呢?

USER:進程所屬的用戶名;

PID:進程編號

%CPU:占用CPU的比例

%MEM:占用內存的比例

VSZ:占用虛擬內存的大小

RSS:占用物理內存的大小

TTY:終端名稱

STAT:進程狀態,S為睡眠,R為正在執行,Z為僵死,D為短期等待,N表示優先級低於普通進程

START:進程的啟動時間

TIME:進程使用CPU的總時間

COMMAND:進程的命令名稱和參數

 

服務的概念

linux系統的服務(service)本質是一種運行在后台的進程,監聽某個端口,等待其他應用的請求。例如,sshd服務監聽22端口,mysql服務監聽3306端口,tomcat服務監聽8080端口等。另一台電腦的終端可以通過22端口連接linux服務器的sshd服務,navicat可以3306端口連接服務器的mysql服務,瀏覽器可以通過8080端口連接服務器的tomcat服務。

 

服務操作命令

在CentOS7中,服務操作命令跟以往的版本有很大不同,用systemctl代替了原來的service。

1. 查看一個服務的當前狀態

systemctl status name.service

其中,name為服務名稱。

2. 開啟/關閉/重新啟動一個服務

systemctl start name.service

systemctl stop name.service

systemctl restart name.service

其中,name為服務名稱。例如關閉sshd服務:systemctl stop sshd.service,這時用ssh命令登錄系統會失敗並提示connection refused。開啟sshd服務:systemctl start sshd.service,這時又可以用ssh命令登錄系統了。這些命令只是臨時開啟或關閉服務,系統重啟后會失效,如果想設置某個服務開啟總是啟用/禁用,要用下面標題3中的命令。

3. 設置一個服務開機啟用/禁用

systemctl enable name.service

systemctl disable name.service

其中,name為服務名稱。

4. 查看服務列表

systemctl list-unit-files [| grep status/name]

其中,status表示按狀態篩選可以取enabled、disabled、static,表示只篩選這種狀態的服務;name表示按名稱篩選,支持模糊匹配。

注意,這個命令查到的服務狀態是指開機啟用/禁用,而不是當前的狀態,這時它與標題1中的systemctl status命令的區別。

5. 查看現在開放的防火牆端口

firewall-cmd --zone=public --list-ports

6. 開放、關閉一個端口

firewall-cmd --zone=public --add-port=port/tcp --permanent

firewall-cmd --zone=public --remove-port=port/tcp --permanent

其中,port為要開放或關閉的端口號,這兩個操作要重啟防火牆服務才能生效。

 

服務操作示例

以防火牆為例

1. 查看防火牆的當前狀態

systemctl status firewalld.service

可以看出,當前防火牆的狀態為開啟。

2. 關閉防火牆

systemctl stop firewalld.service

這時如果再調用systemctl status firewalld.service查看防火牆的當前樁體,會發現變成關閉。

3. 查詢服務列表

systemctl list-unit-files

找到防火牆的部分:

發現仍然是開機啟用狀態,因此調用systemctl stop命令指示臨時關閉防火牆,重啟系統后,防火牆仍然會默認啟用。

4. 設置防火牆為開機默認禁用

systemctl disable firewalld.service

再調用systemctl list-unit-files,找到防火牆的部分:

5. 開放8080端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent

systemctl restart firewalld.service

先開放8080端口,再重啟防火牆服務,即可生效。8080端口通常用於tomcat服務,開放后外部可以訪問tomcat容器中的資源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM