linux程序管理

Linux小菜鸟發表於2024-07-09

Linux程序管理

  • 什麼是程式:應用程式是使用者選擇安裝的程式的總稱,通常包括驅動程式的程序,看圖軟體、解壓縮軟體等通用軟體的程序.也可以顧名思義地說:應用程式就是為使用者提供與電腦溝通所開發出來的程式軟體

  • 什麼是程序:

    狹義定義:程序就是一段程式的執行過程。
     廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。

  • 什麼是執行緒:也叫做輕量級程序,執行緒是程序中的⼀個執⾏單元,負責當前程序中程式的執⾏,⼀個程序中⾄少有⼀個執行緒。⼀個程序中是可以有多個執行緒的,這個應⽤程式也可以稱之為多執行緒程式。

【1】、檢視程序樹

  • pstree:以樹狀結構顯示程序資訊,包括程序之間的關係

  • option

    • -p:顯示程序PID

    • -a:顯示完整的命令列

    • -u:列出每個程序所屬賬號名稱

      可以檢視每一個程序是由哪些賬號開啟的,程序要一直開啟才可以看到,程序有生命週期

    • image-20240408165232506

透過pstree命令可以去進行程序的查詢。

可以透過使用者查詢

pstree -p 使用者名稱

  • ps aux :unix格式靜態檢視系統程序,檢視系統所有程序資訊

    • a:顯示當前終端所有程序

    • u:以使用者格式輸出

    • x:當前使用者在所有終端下的程序

    • [root@bogon ~]# ps aux
      USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      root           1  0.1  0.3 241428 14348 ?        Ss   04:21   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
      
    • 各個欄位的含義

    • USER:程序屬於哪個使用者
      PID:程序ID號
      %CPU:該程序佔用CPU的百分比
      %MEN:該程序佔用實體記憶體的百分比
      VSZ:程序使用掉的虛擬記憶體量(單位:kb)
      TTY:表示程序在那個終端執行,如果核心直接呼叫則顯示“?”,tty1-tty6表示本機終端登入的使用者程序,pts/0-255則表示遠端終端登入使用者的程序
      STAT:程序狀態,R(running)執行,S(sleep)睡眠,s包含子程序,T(stop)停止,Z(zombie)殭屍程序, +後臺程序
      START:程序啟動時間
      TIME:佔用CPU運算時間
      COMMAND:產生此程序的命令
      
  • ps ef :unix格式靜態檢視系統程序,檢視系統所有程序資訊

    • -e:顯示當前終端所有程序

    • -f:顯示最完整的程序資訊

    • -l:以長格式輸出

    • 查詢殭屍程序

    • [root@bogon ~]# ps -e -o ppid,stat | grep Z
      

【2】、top命令

Tasks: 256 total,   1 running, 255 sleeping,   0 stopped,   0 zombie
		程序總數	正在執行的程序  休眠程序數		停止程序數		殭屍程序數

第一行:

系統本地時間

系統執行時間

用幾個使用者在登入

負載情況

image-20240408193624199

  • -M:按照記憶體使用資源排序
  • -P:按照CPU使用資源排序

【3】、程序的前後臺排程

  • 前臺任務

    會持續佔據終端介面,直至任務的結束才會釋放終端介面,在前臺任務佔據終端介面時,我們是不能進行任何操作的

  • 後臺任務

    在後臺執行的任務不會佔據控制介面,我們可以執行其他的命令

  • &:將程式fangruhoutaiyunx

  • jobs -l:檢視後臺任務列表

  • fg 程序編號:將後臺任務恢復到前臺執行

  • CTRL+Z:掛起前臺任務並且放入後臺

  • bg 程序編號:啟用後臺被掛起的程序

  • [root@bogon ~]# ping baidu.com >> /dev/null &
    [1] 3230
    #將程序放入後臺執行
    [root@bogon ~]# jobs -l
    [1]+  3230 Running                 ping baidu.com >> /dev/null &
    #檢視後臺程序
    [root@bogon ~]# fg 1
    ping baidu.com >> /dev/null
    #將後臺程序放入前臺執行
    ^Z
    #掛起前臺任務,並放入後臺
    [1]+  Stopped                 ping baidu.com >> /dev/null
    [root@bogon ~]# bg 1
    #啟用
    [1]+ ping baidu.com >> /dev/null &
    [root@bogon ~]# jobs -l
    [1]+  3230 Running                 ping baidu.com >> /dev/null &
    

【4】、殺死程序

  • CTRL+C:結束當前命令程式,只能殺死前臺任務,後臺任務沒法殺

  • kill

    • 按照PID殺死,精確的殺死一個程序

    • -l:列出可選擇的訊號

    • 常用訊號:

      -1:重啟

      -9:強制殺死,直接殺死,例如殺死殭屍程序

      -15:正常殺死,預設是-15,殺死程序時先終止,後殺死

    • [root@bogon logs]# jobs -l
      [1]   3628 Running                 sleep 2m &
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Running                 sleep 4m &
      [root@bogon logs]# kill 3628
      [root@bogon logs]# jobs -l
      [1]   3628 Terminated              sleep 2m
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Running                 sleep 4m &
      [root@bogon logs]# jobs -l
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Running                 sleep 4m &
      [root@bogon logs]# jobs -l
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Running                 sleep 4m &
      [root@bogon logs]# kill -9 3630
      [root@bogon logs]# jobs -l
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Killed                  sleep 4m
      [root@bogon logs]# jobs -l
      [2]+  3629 Running                 sleep 3m &
      
  • killall

    • 依據程序名殺死程序

    • killall 程序名

    • [root@bogon logs]# jobs -l
      [1]   3673 Running                 sleep 5m &
      [2]-  3674 Running                 sleep 6m &
      [3]+  3675 Running                 sleep 7m &
      [root@bogon logs]# killall sleep 
      [1]   Terminated              sleep 5m
      [2]-  Terminated              sleep 6m
      [3]+  Terminated              sleep 7m
      [root@bogon logs]# jobs -l 
      
    • 強制殺死某使用者所有的程序

      killall -9 -u 使用者名稱
      
  • pkill

    • 按照終端殺死程序,-t

【5】、nice值

  • 每一個程序都會擁有一個“優先順序(priority)”屬性
  • 透過改變nice值,修改程序優先順序
  • nice值的範圍是-20~19,nice值越低優先順序越高,nice預設值是0、
  • nice:在建立程序時設定nice值
  • renice:建立好程序後,重新設定nice值
[kiosk@foundation0 ~]$ ps efo  pid,command,nice
    PID COMMAND                      NI
   5890 bash SYSTEMD_EXEC_PID=2335    0
   3058 bash SYSTEMD_EXEC_PID=2335    0
   8949  \_ ps efo pid,command,nice   0
   2245 /usr/libexec/gdm-wayland-se   0
   2254  \_ /usr/libexec/gnome-sess   0

# 普通使用者對於nice值只能調高(優先順序只能調低),root使用者對於nice值既可以調高,也可以調低
[root@servera ~]# nice -n 19 ping 127.0.0.1 > /dev/null &
[root@servera ~]# ps efo pid,command,nice
    PID COMMAND                      NI
   1519 sudo -i SHELL=/bin/bash HIS   0
   1523  \_ -bash HISTSIZE=1000 HOS   0
   1545      \_ ping 127.0.0.1 SHEL  19
   1546      \_ ps efo pid,command,   0
   1078 /sbin/agetty -o -p -- \u --   0
   1065 /sbin/agetty -o -p -- \u --   0
[root@servera ~]# renice -n 10 1545
1545 (process ID) old priority 19, new priority 10
[root@servera ~]# ps efo pid,command,nice
    PID COMMAND                      NI
   1519 sudo -i SHELL=/bin/bash HIS   0
   1523  \_ -bash HISTSIZE=1000 HOS   0
   1545      \_ ping 127.0.0.1 SHEL  10
   1548      \_ ps efo pid,command,   0
   1078 /sbin/agetty -o -p -- \u --   0
   1065 /sbin/agetty -o -p -- \u --   0
   
# 普通使用者不允許調低nice值,也就是不允許將程序的優先順序調高
[student@servera ~]$ ping 127.0.0.1 > /dev/null &
[1] 1577
[student@servera ~]$ 
[student@servera ~]$ 
[student@servera ~]$ ps efo pid,command,nice
    PID COMMAND                      NI
   1501 -bash USER=student LOGNAME=   0
   1577  \_ ping 127.0.0.1 SHELL=/b   0
   1578  \_ ps efo pid,command,nice   0
[student@servera ~]$ renice -n 14 1577
1577 (process ID) old priority 0, new priority 14
[student@servera ~]$ ps efo pid,command,nice
    PID COMMAND                      NI
   1501 -bash USER=student LOGNAME=   0
   1577  \_ ping 127.0.0.1 SHELL=/b  14
   1581  \_ ps efo pid,command,nice   0
[student@servera ~]$ renice -n 8 1577
renice: failed to set priority for 1577 (process ID): Permission denied

相關文章