什么是程序
一組計算機能識別和執行的指令,用于指導計算機執行特定任務或解決特定問題。程序通常由代碼、數據和資源文件組成,涉及語法、算法和數據結構。為二進制文件
什么是進程
是一個具有獨立功能的程序關于某個數據集合的一次運行活動。作為系統進行資源分配和調度的基本單位,是操作系統結構的基礎。
程序與進程的關系
進程的狀態
基礎進程狀態
創建狀態:進程在創建時需要申請一個空白PCB(process control block進程控制塊),向其中填寫控制和管理進程的信息,完成資源分配。如果創建工作無法完成,比如資源無法滿足,就無法被調度運行,把此時進程所處狀態稱為創建狀態
就緒狀態:進程已準備好,已分配到所需資源,只要分配到CPU就能夠立即運行
執行狀態:進程處于就緒狀態被調度后,進程進入執行狀態
阻塞狀態:正在執行的進程由于某些事件(I/O請求,申請緩存區失?。┒鴷簳r無法運行,進程受到阻塞。在滿足請求時進入就緒狀態等待系統調用
終止狀態:進程結束,或出現錯誤,或被系統終止,進入終止狀態。無法再執行
更多的狀態
運行態:running
就緒態:ready
睡眠態:分為兩種,可中斷:interruptable,不可中斷:uninterruptable
停止態:stopped,暫停于內存,但不會被調度,除非手動啟動
僵尸態:zombie,僵尸態,結束進程,父進程結束前,子進程不關閉,殺死父進程可以關閉僵死態 的子進程
如何結束僵尸態
創建僵尸進程
利用top或ps指令查看僵尸態進程(Z)PID號
利用kill發送指令喚醒僵尸進程的父進程來實現回收僵尸進程
[root@localhost ~]# kill -18 6904
也可以通過殺死僵尸進程的夫進程,但不建議使用。
進程的類型
守護進程: daemon,在系統引導過程中啟動的進程,和終端無關進程
前臺進程:跟終端相關,通過終端啟動的進程
進程的優先級
靜態優先級:100-139
動態優先級:-20 --19
進程管理相關命令
ps
查看靜態的進程統計信息
進程相關信息保存在/proc目錄中
若ps不加選項,查看不到多少信息
[root@localhost ~]# ps PID TTY TIME CMD 6950 pts/2 0000 bash 7441 pts/2 0000 ps
一般使用指令:ps aux
選項
a | 顯示所以進程信息 |
---|---|
u | 以用戶為主的格式輸出 |
x | 顯示當前用戶在所有終端下的進程信息 |
k|--sort 屬性 | 對屬性排序,屬性前加 - 表示倒序 |
ps輸出屬性
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193700 6852 ? Ss 12:53 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 12:53 0:00 [kthreadd]
user | 進程用戶 |
---|---|
PID | pid號 |
%CPU | CPU的使用率 |
%MEM | 內存的使用率 |
VSZ | 虛擬內存大小 |
RSS | 真實內存大小 |
TTY | 終端設備 |
STAT | 進程狀態 |
START | 進程啟動時間 |
TIME | 進程運行了多少時間 |
COMMAND | 進程命令名稱 |
查看進程信息
prstat PID號
[root@localhost ~]# prtstat 6900 Process: sshd State: S (sleeping) CPU#: 1 TTY: 0:0Threads: 1 Process, Group and Session IDs Process ID: 6900 Parent ID: 1152 Group ID: 6900 Session ID: 6900 T Group ID: -1 Page Faults This Process (minor major): 1741 3 Child Processes (minor major): 1384 1 CPU Times This Process (user system guest blkio): 0.00 0.18 0.00 0.00 Child processes (user system guest): 0.01 0.00 0.00 Memory Vsize: 151 MB RSS: 5357 kB RSS Limit: 18446744073709 MB Code Start: 0x5644f8c0d000 Code Stop: 0x5644f8cd4a24 Stack Start: 0x7ffc51c00f00 Stack Pointer (ESP): 0x7ffc51c003f8 Inst Pointer (EIP): 0x7fb109e23783 Scheduling Policy: normal Nice: 0 RT Priority: 0 (non RT)
top
實時查看進程統計信息
[root@localhost ~]# top top - 17:01:45 up 4:08, 4 users, load average: 0.00, 0.01, 0.05 Tasks: 209 total, 1 running, 208 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1867048 total, 76652 free, 796612 used, 993784 buff/cache KiB Swap: 2097148 total, 2097004 free, 144 used. 810116 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 430 root 20 0 0 0 0 S 0.3 0.0 0:01.72 xfsaild/dm-0 1 root 20 0 193700 6852 4068 S 0.0 0.4 0:02.61 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:00.03 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.65 rcu_sched 10 root rt 0 0 0 0 S 0.0 0.0 0:00.06 watchdog/0 11 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/1 12 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/1 13 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/1 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H 16 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/2 17 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/2 18 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/2 19 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kworker/2:0 20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/2:0H 21 root rt 0 0 0 0 S 0.0 0.0 0:00.04 watchdog/3 22 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/3 23 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/3 25 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/3:0H 27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 28 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 29 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
各個字段的含義如下:
PID:進程的 ID。
USER:該進程所屬的用戶。
PR:優先級,數值越小優先級越高。
NI:優先級,數值越小、優先級越高。
VIRT:該進程使用的虛擬內存的大小,單位為 KB。
RES:該進程使用的物理內存的大小,單位為 KB。
SHR:共享內存大小,單位為 KB。
S:進程狀態。
%CPU:該進程占用 CPU 的百分比。
%MEM:該進程占用內存的百分比。
TIME+:該進程共占用的 CPU 時間。
COMMAND:進程的命令名。
top命令欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閑
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機偷走的時間
在top中的命令
q | 退出命令 |
---|---|
s | 修改刷新時間間隔 |
k | 終止指定進程 |
w | 保存文件 |
pgrep
查看指定的進程
-u | 指定用戶 |
---|---|
-l | 顯示進程命 |
-a | 顯示完整格式的進程名 |
[root@localhost ~]# pgrep -u asdjkl 9828 9834 9841 9842 9900 9905 9991 10010 10015 10018 10037 [root@localhost ~]# pgrep -u asdjkl -l 9828 gnome-keyring-d 9834 gnome-session-b 9841 dbus-launch 9842 dbus-daemon 9900 gvfsd 9905 gvfsd-fuse 9991 ssh-agent 10010 at-spi-bus-laun 10015 dbus-daemon [root@localhost ~]# pgrep -u asdjkl -a 9828 /usr/bin/gnome-keyring-daemon --daemonize --login 9834 /usr/libexec/gnome-session-binary --session gnome-classic 9841 dbus-launch --sh-syntax --exit-with-session 9842 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session 9900 /usr/libexec/gvfsd 9905 /usr/libexec/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes 9991 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
pstree
以樹形結構列出進程信息
常用選項
-a 顯示啟動每個進程對應的完整指令,包括啟動進程的路徑、參數等
-p 顯示PID
-u 顯示用戶切換
-H pid 高亮顯示指定進程及其前輩進程
[root@localhost ~]# pstree -a systemd --switched-root --system --deserialize 21 ├─ModemManager │ └─2*[{ModemManager}] ├─NetworkManager --no-daemon │ └─2*[{NetworkManager}] [root@localhost ~]# pstree -p systemd(1)─┬─ModemManager(762)─┬─{ModemManager}(785) │ └─{ModemManager}(801) ├─NetworkManager(841)─┬─{NetworkManager}(849) │ └─{NetworkManager}(855) ├─VGAuthService(750) ├─abrt-watch-log(758) ├─abrt-watch-log(760) ├─abrtd(739) [root@localhost ~]# pstree -u systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager───2*[{NetworkManager}] ├─VGAuthService ├─2*[abrt-watch-log] ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl
free
查看進程占用 內存的詳細信息
[root@localhost ~]# free total used free shared buff/cache available Mem: 1867048 1247944 119912 13656 499192 358276 Swap: 2097148 6572 2090576 [root@localhost ~]#
iostat
iostat 可以提供更豐富的IO性能狀態數據
Total DISK READ :0.00 B/s | Total DISK WRITE : 0.00 B/s Actual DISK READ:0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-~tem --deserialize 21 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H] 10246 be/4 asdjkl0.00 B/s 0.00 B/s 0.00 % 0.00 % seapplet 7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh] 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched] 10 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] 11 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1] 12 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1] 13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1] 15 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/1:0H] 16 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/2] 17 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/2] 18 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/2] 20 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/2:0H] 21 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/3] 22 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/3]
iotop
查看網絡流量
進程管理
手動啟動
"命令 &",把命令放入后臺執行
運行中的作業: Ctrl+z 放到后臺 但是會停止作業
尚未啟動的作業: 命令 &
查看后臺任務列表 :jobs
調出后臺任務: fg
繼續任務:bg
并行執行任務:每個命令使用&隔開
結束進程
kill
kill 命令只是用來向進程發送一個信號,至于這個信號是什么,是用戶指定的
kill后面的選項 [root@localhost ~]# trap -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR1 11) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM 16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP 21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ 26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR 31) SIGSYS34) SIGRTMIN35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+3 38) SIGRTMIN+439) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8 43) SIGRTMIN+944) SIGRTMIN+1045) SIGRTMIN+1146) SIGRTMIN+1247) SIGRTMIN+13 48) SIGRTMIN+1449) SIGRTMIN+1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-12 53) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-7 58) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2 63) SIGRTMAX-164) SIGRTMAX
計劃任務
一次性的計劃任務
[root@localhost ~]# at 13:50 at> mkdir kk at>job 1 at Thu Apr 18 13:50:00 2024 [root@localhost ~]# ls [root@localhost ~]# ls 123 ?? aa anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 視頻 圖片 文檔 下載 音樂 桌面 [root@localhost ~]# ls ?? aa initial-setup-ks.cfg 公共 視頻 文檔 音樂 123 anaconda-ks.cfg kk 模板 圖片 下載 桌面 您在 /var/spool/mail/root 中有新郵件
周期性的計劃任務
crontab [選項] [file]
選項 | 功能 |
---|---|
-u user | 用來設定某個用戶的 crontab 服務,例如 "-u demo" 表示設備 demo 用戶的 crontab 服務,此選項一般有 root 用戶來運行。 |
-e | 編輯某個用戶的 crontab 文件內容。如果不指定用戶,則表示編輯當前用戶的 crontab 文件。 |
-l | 顯示某用戶的 crontab 文件內容,如果不指定用戶,則表示顯示當前用戶的 crontab 文件內容。 |
-r | 從 /var/spool/cron 刪除某用戶的 crontab 文件,如果不指定用戶,則默認刪除當前用戶的 crontab 文件。 |
-i | 在刪除用戶的 crontab 文件時,給確認提示。 |
* * * * * 分時日月周
鏈接:https://www.cnblogs.com/zhj0708/p/18143407
-
Linux
+關注
關注
87文章
11450瀏覽量
212705 -
程序
+關注
關注
117文章
3819瀏覽量
82352 -
進程
+關注
關注
0文章
206瀏覽量
14210
原文標題:深入解析Linux程序與進程:你不知道的高效運行秘訣
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Linux進程狀態詳解

深入解析:SiP與SoC的技術特點與應用前景

深入探討Linux系統中的動態鏈接庫機制

深入Linux進程管理:提升效率與穩定性的關鍵方法

一文搞懂Linux進程的睡眠和喚醒
Linux用戶身份與進程權限詳解

Linux設備驅動程序分類有哪些
linux驅動程序如何加載進內核
linux驅動程序的編譯方法是什么
深入探討Linux的進程調度器

評論