Linux進程作業的查看和殺死


一、引入進程

1、內存划分為:用戶空間和內核空間

  1、在用戶空間里運行的進程,就是用戶進程,所屬的狀態為用戶態

  2、在內核空間里運行的進程,就是系統進程,所屬的狀態為內核態

    例:執行內核里的代碼的時候,就是屬於內核態。

Linux的kernel其實就是一個軟件,比較核心而已。

內核作用:

  1.對cpu進行調度管理

  2.對內存進行管理

  3.對進程進行管理

  4.對文件系統進行管理

  5.對其他的硬件管理

2、內核空間的進程可以訪問用戶空間,但是用戶空間的進程不能訪問內核空間。

 

 

二、進程

  process是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源(內存、CPU)分配和調度的一個獨立單位。

1、進程控制塊(PCB)

  是系統感知進程存在的唯一憑證,是數據結構,占用內存空間。

2、進程上下文

  1、上文:已執行過的進程指令和數據在相關寄存器和堆棧中的內容稱為上文。

  2、正文:正在執行的指令和數據在相關寄存器和堆棧中的內容。

  3、下文:待執行的指令和數據在相關寄存器和堆棧中的內容。

進程上下文切換:

  指多任務系統中,CPU的控制權由運行任務,轉移到另外一個就緒任務時所發生的事件;當前運行任務轉為就緒(或者掛起、刪除)狀態,另一個被選定的就緒任務成為當前任務。

3、線程

  thread只能歸屬於一個進程並且它只能訪問該進程所擁有的資源。當操作系統創建一個進程后,該進程會自動申請一個名為主線程或首要線程的線程。

簡而言之:

  1、一個程序至少有一個進程,一個進程至少有一個線程;

  2、線程的划分尺度小於進程,使得多線程程序的並發性高;

  3、進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。

shell> echo $PPID //查看父進程ID 2100 shell> echo $$ //查看當前進程ID 2102

 

 

三、ps命令

  用於查看os進程信息。

1、ps命令查看這些數據

  1、描述信息:pid 進程名 父子shell的家族關系等

  2、控制信息:進程當前狀態、進程優先級等

  3、資源管理信息:占多少內存,打開了多少個文件等

  4、cpu現場保護結構

注意:ps命令查看靜態的進程統計信息。

2、常見ps命令

shell> ps aux 或 ps -elf

a:顯示當前終端啟動的進程

u:顯示用戶為主的進程信息

x:顯示所有進程信息

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

-l:使用長格式顯示進程信息

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

[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

解析:

  PID   進程的ID;

  %CPU  進程占用的CPU百分比;

  %MEM  占用內存的百分比;

  COMMAND 命令的名稱和參數

[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD

解析:

  R 正在運行,在可中斷隊列中(就緒狀態);

  S 處於休眠狀態,靜止狀態;

  Z 僵屍進程不存在但暫時無法消除;

 

 

四、top命令

  查看動態的進程排名信息。

1、命令行直接top命令

[root@localhost ~]# top

 

等待輸入……

  h獲得幫助

  1:顯示各CPU情況

  P:按%CPU排序

  M:按%MEM排序

  空格:馬上刷新(默認3秒)

  q:退出(默認的top會一直占用當前端口)

解析:load average: 0.06, 0.60, 0.48

  表示系統負載,即任務隊列的平均長度。

  三個數值分別為 1分鍾、5分鍾、15分鍾前到現在的平均值。(w和uptime也可以查看top的頂頭信息)

2、top命令常接選項

[root@localhost ~]# top -d 1 -n 5 -p 1

-d 1    指定刷新間隔時間為1秒

-n 5    刷新次數

-p 1    顯示指定PID為1的進程信息,如果要指定多個PID,用逗號分開

 

 

五、其他查看進程的命令 

1、pstree命令:以樹型結構顯示各進程間的關系

shell> pstree

init─┬─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─automount───4*[{automount}] ├─certmonger ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─cupsd ├─dbus-daemon ├─hald─┬─hald-runner─┬─hald-addon-acpi │ │ └─hald-addon-inpu │ └─{hald} ├─irqbalance ├─login───bash ├─mcelog ├─5*[mingetty] ├─mysqld_safe───mysqld───28*[{mysqld}] ├─rpc.statd ├─rpcbind ├─rsyslogd───3*[{rsyslogd}] ├─2*[sendmail] ├─sshd─┬─sshd───bash───pstree │ └─sshd───bash───mysql ├─udevd───2*[udevd] ├─vsftpd ├─xinetd └─zabbix_agentd───5*[zabbix_agentd]

常接命令選項-p:列出進程的PID號

注意:使用{}的是進程的線程。

 

2、pgrep命令:根據特定條件查詢進程PID信息

[root@localhost ~]# pgrep init 1 [root@localhost ~]# pgrep -l init 1 init [root@localhost ~]# pgrep -l -u root -t pts/2
11567 bash

-l:列出進程的名稱

-u:根據進程所屬的用戶名進行查找

-t:根據進程所在的終端進行查找

……比較少用,特殊情況下會用用。

 

 

六、進程的優先級

  Linux內核的基本任務是調度進程,每個進程受兩個參數影響其調度。

1、優先級(priority):內核控制動態變化

  值越小越早被cpu執行,用戶無法直接調整數值大小。

2、niceness:進程可被執行的優先級的修正數值(可以人工修改)

1、用nice命令開新的nice(新開啟的進程),以新的nice來啟動命令 nice -10 vi &  //設置nice值為10 nice --10 vi &  //設置nice值為-10

2、用renice命令設置新nice(已經存在的進程) renice 10 15132  //設置nice值為10 renice -10 15132  //設置nice值為-10

3、用top命令修改進程的優先級   先輸入r,然后輸入pid,最后輸入優先級

 

 

七、作業控制機制

  前台啟動:用戶輸入命令,直接執行程序

  后台啟動:在命令行尾加入“&”符號,讓進程切入后台執行

  bg命令:將后台停止的進程,在后台重新運行

[root@localhost lianxi]# jobs  //查看后台作業信息 [1]+ Stopped vim num.txt [2]-  Killed       cp -i -r /mnt/* /tmp + :最新放到后台的進程 - :僅次於最新放到后台的進程 
[root@localhost lianxi]# fg  //將后台的進程調到前台

  fg將處於后台的進程恢復到前台運行,需指定作業號,不指定作業號,將恢復有“+”標記的進程。

 

 

八、kill命令

  kill命令的實現是基於OS的“信號機制”。信號機制除了基本通知功能外,還可以傳遞附加信息。詳解參考:http://www.cnblogs.com/geaozhang/p/6874310.html

shell> kill –l  #列出linux系統支持的信號種類

格式:

  kill –信號代碼 PID

原理:kill命令用來發送信號(軟中斷信號),進程收到信號后采取的行動:終止、忽略、掛起

 

1、kill和killall的區別:

  kill    后面寫進程ID,不能寫進程名

  killall 后面寫進程名,不能寫進程ID,會將相同名字的進程一起殺死

2、pkill命令:根據“特定條件”終止相應的進程

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

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

shell> pkill mysqld  #強行終止mysqld服務進程


免責聲明!

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



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