什么是程序
一組計算機(jī)能識別和執(zhí)行的指令,用于指導(dǎo)計算機(jī)執(zhí)行特定任務(wù)或解決特定問題。程序通常由代碼、數(shù)據(jù)和資源文件組成,涉及語法、算法和數(shù)據(jù)結(jié)構(gòu)。為二進(jìn)制文件
什么是進(jìn)程
是一個具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運(yùn)行活動。作為系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。
程序與進(jìn)程的關(guān)系
進(jìn)程的狀態(tài)
基礎(chǔ)進(jìn)程狀態(tài)
創(chuàng)建狀態(tài):進(jìn)程在創(chuàng)建時需要申請一個空白PCB(process control block進(jìn)程控制塊),向其中填寫控制和管理進(jìn)程的信息,完成資源分配。如果創(chuàng)建工作無法完成,比如資源無法滿足,就無法被調(diào)度運(yùn)行,把此時進(jìn)程所處狀態(tài)稱為創(chuàng)建狀態(tài)
就緒狀態(tài):進(jìn)程已準(zhǔn)備好,已分配到所需資源,只要分配到CPU就能夠立即運(yùn)行
執(zhí)行狀態(tài):進(jìn)程處于就緒狀態(tài)被調(diào)度后,進(jìn)程進(jìn)入執(zhí)行狀態(tài)
阻塞狀態(tài):正在執(zhí)行的進(jìn)程由于某些事件(I/O請求,申請緩存區(qū)失敗)而暫時無法運(yùn)行,進(jìn)程受到阻塞。在滿足請求時進(jìn)入就緒狀態(tài)等待系統(tǒng)調(diào)用
終止?fàn)顟B(tài):進(jìn)程結(jié)束,或出現(xiàn)錯誤,或被系統(tǒng)終止,進(jìn)入終止?fàn)顟B(tài)。無法再執(zhí)行
更多的狀態(tài)
運(yùn)行態(tài):running
就緒態(tài):ready
睡眠態(tài):分為兩種,可中斷:interruptable,不可中斷:uninterruptable
停止態(tài):stopped,暫停于內(nèi)存,但不會被調(diào)度,除非手動啟動
僵尸態(tài):zombie,僵尸態(tài),結(jié)束進(jìn)程,父進(jìn)程結(jié)束前,子進(jìn)程不關(guān)閉,殺死父進(jìn)程可以關(guān)閉僵死態(tài) 的子進(jìn)程
如何結(jié)束僵尸態(tài)
創(chuàng)建僵尸進(jìn)程
利用top或ps指令查看僵尸態(tài)進(jìn)程(Z)PID號
利用kill發(fā)送指令喚醒僵尸進(jìn)程的父進(jìn)程來實現(xiàn)回收僵尸進(jìn)程
[root@localhost ~]# kill -18 6904
也可以通過殺死僵尸進(jìn)程的夫進(jìn)程,但不建議使用。
進(jìn)程的類型
守護(hù)進(jìn)程: daemon,在系統(tǒng)引導(dǎo)過程中啟動的進(jìn)程,和終端無關(guān)進(jìn)程
前臺進(jìn)程:跟終端相關(guān),通過終端啟動的進(jìn)程
進(jìn)程的優(yōu)先級
靜態(tài)優(yōu)先級:100-139
動態(tài)優(yōu)先級:-20 --19
進(jìn)程管理相關(guān)命令
ps
查看靜態(tài)的進(jìn)程統(tǒng)計信息
進(jìn)程相關(guān)信息保存在/proc目錄中
若ps不加選項,查看不到多少信息
[root@localhost ~]# ps PID TTY TIME CMD 6950 pts/2 0000 bash 7441 pts/2 0000 ps
一般使用指令:ps aux
選項
a | 顯示所以進(jìn)程信息 |
---|---|
u | 以用戶為主的格式輸出 |
x | 顯示當(dāng)前用戶在所有終端下的進(jìn)程信息 |
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 | 進(jìn)程用戶 |
---|---|
PID | pid號 |
%CPU | CPU的使用率 |
%MEM | 內(nèi)存的使用率 |
VSZ | 虛擬內(nèi)存大小 |
RSS | 真實內(nèi)存大小 |
TTY | 終端設(shè)備 |
STAT | 進(jìn)程狀態(tài) |
START | 進(jìn)程啟動時間 |
TIME | 進(jìn)程運(yùn)行了多少時間 |
COMMAND | 進(jìn)程命令名稱 |
查看進(jìn)程信息
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
實時查看進(jìn)程統(tǒng)計信息
[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:進(jìn)程的 ID。
USER:該進(jìn)程所屬的用戶。
PR:優(yōu)先級,數(shù)值越小優(yōu)先級越高。
NI:優(yōu)先級,數(shù)值越小、優(yōu)先級越高。
VIRT:該進(jìn)程使用的虛擬內(nèi)存的大小,單位為 KB。
RES:該進(jìn)程使用的物理內(nèi)存的大小,單位為 KB。
SHR:共享內(nèi)存大小,單位為 KB。
S:進(jìn)程狀態(tài)。
%CPU:該進(jìn)程占用 CPU 的百分比。
%MEM:該進(jìn)程占用內(nèi)存的百分比。
TIME+:該進(jìn)程共占用的 CPU 時間。
COMMAND:進(jìn)程的命令名。
top命令欄位信息簡介
us:用戶空間
sy:內(nèi)核空間
ni:調(diào)整nice時間
id:空閑
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機(jī)偷走的時間
在top中的命令
q | 退出命令 |
---|---|
s | 修改刷新時間間隔 |
k | 終止指定進(jìn)程 |
w | 保存文件 |
pgrep
查看指定的進(jìn)程
-u | 指定用戶 |
---|---|
-l | 顯示進(jìn)程命 |
-a | 顯示完整格式的進(jìn)程名 |
[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
以樹形結(jié)構(gòu)列出進(jìn)程信息
常用選項
-a 顯示啟動每個進(jìn)程對應(yīng)的完整指令,包括啟動進(jìn)程的路徑、參數(shù)等
-p 顯示PID
-u 顯示用戶切換
-H pid 高亮顯示指定進(jìn)程及其前輩進(jìn)程
[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
查看進(jìn)程占用 內(nèi)存的詳細(xì)信息
[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性能狀態(tài)數(shù)據(jù)
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
查看網(wǎng)絡(luò)流量
進(jìn)程管理
手動啟動
"命令 &",把命令放入后臺執(zhí)行
運(yùn)行中的作業(yè): Ctrl+z 放到后臺 但是會停止作業(yè)
尚未啟動的作業(yè): 命令 &
查看后臺任務(wù)列表 :jobs
調(diào)出后臺任務(wù): fg
繼續(xù)任務(wù):bg
并行執(zhí)行任務(wù):每個命令使用&隔開
結(jié)束進(jìn)程
kill
kill 命令只是用來向進(jìn)程發(fā)送一個信號,至于這個信號是什么,是用戶指定的
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
計劃任務(wù)
一次性的計劃任務(wù)
[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 中有新郵件
周期性的計劃任務(wù)
crontab [選項] [file]
選項 | 功能 |
---|---|
-u user | 用來設(shè)定某個用戶的 crontab 服務(wù),例如 "-u demo" 表示設(shè)備 demo 用戶的 crontab 服務(wù),此選項一般有 root 用戶來運(yùn)行。 |
-e | 編輯某個用戶的 crontab 文件內(nèi)容。如果不指定用戶,則表示編輯當(dāng)前用戶的 crontab 文件。 |
-l | 顯示某用戶的 crontab 文件內(nèi)容,如果不指定用戶,則表示顯示當(dāng)前用戶的 crontab 文件內(nèi)容。 |
-r | 從 /var/spool/cron 刪除某用戶的 crontab 文件,如果不指定用戶,則默認(rèn)刪除當(dāng)前用戶的 crontab 文件。 |
-i | 在刪除用戶的 crontab 文件時,給確認(rèn)提示。 |
* * * * * 分時日月周
鏈接:https://www.cnblogs.com/zhj0708/p/18143407
-
Linux
+關(guān)注
關(guān)注
87文章
11350瀏覽量
210476 -
程序
+關(guān)注
關(guān)注
117文章
3797瀏覽量
81450 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
204瀏覽量
14002
原文標(biāo)題:深入解析Linux程序與進(jìn)程:你不知道的高效運(yùn)行秘訣
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
深入探討Linux系統(tǒng)中的動態(tài)鏈接庫機(jī)制
![<b class='flag-5'>深入</b>探討<b class='flag-5'>Linux</b>系統(tǒng)中的動態(tài)鏈接庫機(jī)制](https://file1.elecfans.com/web3/M00/02/B7/wKgZPGdiLnaAaR-oAAAPLwOzZgA047.png)
深入Linux進(jìn)程管理:提升效率與穩(wěn)定性的關(guān)鍵方法
![<b class='flag-5'>深入</b><b class='flag-5'>Linux</b><b class='flag-5'>進(jìn)程</b>管理:提升效率與穩(wěn)定性的關(guān)鍵方法](https://file1.elecfans.com/web2/M00/0C/2C/wKgZomc_9lyAIU4mAAAQY3FCwIs816.png)
一文搞懂Linux進(jìn)程的睡眠和喚醒
Linux用戶身份與進(jìn)程權(quán)限詳解
![<b class='flag-5'>Linux</b>用戶身份與<b class='flag-5'>進(jìn)程</b>權(quán)限詳解](https://file1.elecfans.com/web2/M00/0A/EE/wKgaomcYcOeAOFTIAAAlR6hIpxM398.png)
LSP 2.10 DaVinci Linux驅(qū)動程序
![LSP 2.10 DaVinci <b class='flag-5'>Linux</b>驅(qū)動<b class='flag-5'>程序</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Linux設(shè)備驅(qū)動程序分類有哪些
linux驅(qū)動程序如何加載進(jìn)內(nèi)核
linux驅(qū)動程序主要有哪些功能
linux驅(qū)動程序的編譯方法是什么
深入探討Linux的進(jìn)程調(diào)度器
![<b class='flag-5'>深入</b>探討<b class='flag-5'>Linux</b>的<b class='flag-5'>進(jìn)程</b>調(diào)度器](https://file1.elecfans.com/web2/M00/03/3A/wKgaoma679SAK08_AALRmJd5TD4803.png)
評論