什么是程序
一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令,用于指導(dǎo)計(jì)算機(jī)執(zhí)行特定任務(wù)或解決特定問題。程序通常由代碼、數(shù)據(jù)和資源文件組成,涉及語法、算法和數(shù)據(jù)結(jié)構(gòu)。為二進(jìn)制文件
什么是進(jìn)程
是一個(gè)具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。作為系統(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)建時(shí)需要申請一個(gè)空白PCB(process control block進(jìn)程控制塊),向其中填寫控制和管理進(jìn)程的信息,完成資源分配。如果創(chuàng)建工作無法完成,比如資源無法滿足,就無法被調(diào)度運(yùn)行,把此時(shí)進(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ū)失敗)而暫時(shí)無法運(yùn)行,進(jìn)程受到阻塞。在滿足請求時(shí)進(jìn)入就緒狀態(tài)等待系統(tǒng)調(diào)用
終止?fàn)顟B(tài):進(jìn)程結(jié)束,或出現(xiàn)錯(cuò)誤,或被系統(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)存,但不會(huì)被調(diào)度,除非手動(dòng)啟動(dòng)
僵尸態(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)程來實(shí)現(xiàn)回收僵尸進(jìn)程
[root@localhost ~]# kill -18 6904
也可以通過殺死僵尸進(jìn)程的夫進(jìn)程,但不建議使用。
進(jìn)程的類型
守護(hù)進(jìn)程: daemon,在系統(tǒng)引導(dǎo)過程中啟動(dòng)的進(jìn)程,和終端無關(guān)進(jìn)程
前臺(tái)進(jìn)程:跟終端相關(guān),通過終端啟動(dòng)的進(jìn)程
進(jìn)程的優(yōu)先級
靜態(tài)優(yōu)先級:100-139
動(dòng)態(tài)優(yōu)先級:-20 --19
進(jìn)程管理相關(guān)命令
ps
查看靜態(tài)的進(jìn)程統(tǒng)計(jì)信息
進(jìn)程相關(guān)信息保存在/proc目錄中
若ps不加選項(xiàng),查看不到多少信息
[root@localhost ~]# ps PID TTY TIME CMD 6950 pts/2 0000 bash 7441 pts/2 0000 ps
一般使用指令:ps aux
選項(xiàng)
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 | 真實(shí)內(nèi)存大小 |
TTY | 終端設(shè)備 |
STAT | 進(jìn)程狀態(tài) |
START | 進(jìn)程啟動(dòng)時(shí)間 |
TIME | 進(jìn)程運(yùn)行了多少時(shí)間 |
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
實(shí)時(shí)查看進(jìn)程統(tǒng)計(jì)信息
[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
各個(gè)字段的含義如下:
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 時(shí)間。
COMMAND:進(jìn)程的命令名。
top命令欄位信息簡介
us:用戶空間
sy:內(nèi)核空間
ni:調(diào)整nice時(shí)間
id:空閑
wa:等待IO時(shí)間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機(jī)偷走的時(shí)間
在top中的命令
q | 退出命令 |
---|---|
s | 修改刷新時(shí)間間隔 |
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)程信息
常用選項(xiàng)
-a 顯示啟動(dòng)每個(gè)進(jìn)程對應(yīng)的完整指令,包括啟動(dò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)程管理
手動(dòng)啟動(dòng)
"命令 &",把命令放入后臺(tái)執(zhí)行
運(yùn)行中的作業(yè): Ctrl+z 放到后臺(tái) 但是會(huì)停止作業(yè)
尚未啟動(dòng)的作業(yè): 命令 &
查看后臺(tái)任務(wù)列表 :jobs
調(diào)出后臺(tái)任務(wù): fg
繼續(xù)任務(wù):bg
并行執(zhí)行任務(wù):每個(gè)命令使用&隔開
結(jié)束進(jìn)程
kill
kill 命令只是用來向進(jìn)程發(fā)送一個(gè)信號,至于這個(gè)信號是什么,是用戶指定的
kill后面的選項(xiàng) [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
計(jì)劃任務(wù)
一次性的計(jì)劃任務(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 中有新郵件
周期性的計(jì)劃任務(wù)
crontab [選項(xiàng)] [file]
選項(xiàng) | 功能 |
---|---|
-u user | 用來設(shè)定某個(gè)用戶的 crontab 服務(wù),例如 "-u demo" 表示設(shè)備 demo 用戶的 crontab 服務(wù),此選項(xiàng)一般有 root 用戶來運(yùn)行。 |
-e | 編輯某個(gè)用戶的 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 文件時(shí),給確認(rèn)提示。 |
* * * * * 分時(shí)日月周
鏈接:https://www.cnblogs.com/zhj0708/p/18143407
-
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209498 -
程序
+關(guān)注
關(guān)注
117文章
3787瀏覽量
81043 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
203瀏覽量
13961
原文標(biāo)題:深入解析Linux程序與進(jìn)程:你不知道的高效運(yùn)行秘訣
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論