??博主主頁:@??. 一懷明月??
?????專欄系列:線性代數(shù),C初學者入門訓練,題解C,C的使用文章,「初學」C++,linux
??座右銘:“不要等到什么都沒有了,才下定決心去做”
??????大家覺不錯的話,就懇求大家點點關(guān)注,點點小愛心,指點指點??????
目錄
進程
?編輯
進程怎么管理
task_struct 核心字段都有哪些
進程(任務(wù))對應(yīng)的標識符:
如何去查看一個進程的pid?
進程創(chuàng)建
linux中創(chuàng)建進程的方式
1.命令行中直接啟動進程(手動啟動)
2.通過代碼來進程創(chuàng)建
在操作系統(tǒng)加載到內(nèi)存時,其他進程并不是在操作系統(tǒng)這塊內(nèi)存上加載的。
父進程是什么
bash:命令行解釋器
如何獲取父進程的ID?
查看進程的第二種方式
工作目錄
進程
引入:在內(nèi)存上的程序就是進程,操作系統(tǒng)內(nèi)可能會同時存在多個進程,操作系統(tǒng)就要管理所有的進程
進程怎么管理
類似創(chuàng)建結(jié)構(gòu)體,將各個進程的屬性放在對應(yīng)的結(jié)構(gòu)體中,連接所有的結(jié)構(gòu)體,這樣操作系統(tǒng)可以很好的管理
進程pcb:進程控制塊
就是一個結(jié)構(gòu)體,結(jié)構(gòu)體里放著進程的各種屬性(id、代碼地址和數(shù)據(jù)地址、狀態(tài)、優(yōu)先級、鏈接字段等)
對進程的管理,被建模為對進程控制塊鏈表的管理
總結(jié):
什么是進程?
進程=可執(zhí)行程序+內(nèi)核數(shù)據(jù)結(jié)構(gòu)(pcb、….)
內(nèi)核數(shù)據(jù)結(jié)構(gòu):方便os對進程進行管理
task_struct 核心字段都有哪些
Linux中,進程pcb具體是struct?task_struct,Linux中采用雙鏈表的形式鏈接的pcb
進程(任務(wù))對應(yīng)的標識符:
pid(每一個正在運行的進程都有一個唯一的標識符)
如何去查看一個進程的pid?
1)通過ps(Linux中的"ps"指令用于查看系統(tǒng)中正在運行的進程信息)
//ps ajx是一種用于顯示Linux系統(tǒng)進程信息的命令 [BCH@hcss-ecs-6176 9_23]$?ps ajx | head -1 && ps ajx | grep mycode//&& 可以同時執(zhí)行兩個命令 PPID???PID??PGID???SID TTY??????TPGID STAT???UID???TIME COMMAND 2932 28593 28593??1485 pts/0????28593 S+????1000???0:00 ./mycode 3906 28927 28926??2057 pts/2????28926 R+????1000???0:00 grep --color=auto mycode//因為我們使用了grep這個指令,所以查詢mycode進程時,也查詢到grep的進程
2)通過系統(tǒng)調(diào)用的方法去查看pid
誰調(diào)用getpid()這個函數(shù),就獲取這個進程的pid,需要頭文件#include<sys/types.h> #include<unistd.h> code.c文件 #include<stdio.h> #include<sys/types.h> #include<unistd.h> int main() { ????????int i=0; ????????while(i<100) ????????{ ????????????????pid_t id=getpid(); ????????????????printf("我是一個進程...,我的pid%d\n",id); ????????????????sleep(1); ????????????????i++; ????????} ????????return 0; } [BCH@hcss-ecs-6176 9_23]$ make? make: “mycode”是最新的。 [BCH@hcss-ecs-6176 9_23]$ ./mycode 我是一個進程...,我的pid12163//這個進程的pid就是12163 我是一個進程...,我的pid12163 我是一個進程...,我的pid12163 我是一個進程...,我的pid12163
我們可以用進程pid對進程進行控制
例如 kill -9 進程id//這樣就可以殺死改id的進程
進程ppid:父進程id
命令行中父進程到底是誰呢?
命令行解釋器bash
進程創(chuàng)建
linux中創(chuàng)建進程的方式
1.命令行中直接啟動進程(手動啟動)
?? ?1)在輸入指令的時候,回車這樣進程就啟動了
?? ?2)在windows中雙擊圖標的時候,進程就啟動了
2.通過代碼來進程創(chuàng)建
fork等函數(shù),啟動進程的時候,操作系統(tǒng)會創(chuàng)建對應(yīng)的pcb,本質(zhì)就是創(chuàng)建進程,一般是通過父進程創(chuàng)建的(父子關(guān)系)!
在操作系統(tǒng)加載到內(nèi)存時,其他進程并不是在操作系統(tǒng)這塊內(nèi)存上加載的。
當操作系統(tǒng)啟動后,它會為每個正在運行的進程分配獨立的內(nèi)存空間。操作系統(tǒng)會為每個進程創(chuàng)建一個稱為進程控制塊(Process Control Block,PCB)的數(shù)據(jù)結(jié)構(gòu)來管理進程的狀態(tài)和資源信息。
每個進程的 PCB 包含了進程的代碼、數(shù)據(jù)和堆棧等信息,這些內(nèi)容被加載到各自的內(nèi)存空間中。操作系統(tǒng)負責調(diào)度不同進程之間的切換,并確保每個進程在其分配的內(nèi)存空間中運行,從而實現(xiàn)進程間的隔離和保護。
因此,當操作系統(tǒng)加載到內(nèi)存時,它會為其他進程分配獨立的內(nèi)存空間,并在這些內(nèi)存空間中加載并運行各個進程的代碼和數(shù)據(jù)。每個進程的內(nèi)存空間都是相互獨立的,彼此之間不會互相干擾。這種隔離和保護機制有助于確保操作系統(tǒng)和各個進程的穩(wěn)定性和安全性。
父進程是什么
父進程是指在創(chuàng)建一個新進程時生成該新進程的現(xiàn)有進程。
bash:命令行解釋器
我們命令行啟動的進程,都是bash的子進程
如何獲取父進程的ID?
通過getppid函數(shù)
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main() { int i=0; while(i<100) { printf("I am a process: myid: %d,parent id: %d\n",getpid(),getppid());//獲取父子進程 sleep(1); i++; } return 0; } [BCH@hcss-ecs-6176 9_23]$ make gcc -o mycode code.c [BCH@hcss-ecs-6176 9_23]$ ./mycode//加載進程 I am a process: myid: 29912,parent id: 20426//子進程的pid是29912,父進程的pid20426 I am a process: myid: 29912,parent id: 20426 I am a process: myid: 29912,parent id: 20426
task_struct:其中肯定包含pid、ppid
查看進程的第二種方式
除了使用ps命令查看進程,Proc動態(tài)目錄結(jié)構(gòu),存放所有存在的進程,目錄的名稱就是以這個id命名的
該目錄下的文件:其中就包含了該進程的所有屬性
[BCH@hcss-ecs-6176 9_23]$ ls /proc/25204 -l 總用量 0 dr-xr-xr-x 2 BCH BCH 0 9月??25 10:24 attr -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 autogroup -r-------- 1 BCH BCH 0 9月??25 10:24 auxv -r--r--r-- 1 BCH BCH 0 9月??25 10:24 cgroup --w------- 1 BCH BCH 0 9月??25 10:24 clear_refs -r--r--r-- 1 BCH BCH 0 9月??25 10:16 cmdline -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 comm -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 coredump_filter -r--r--r-- 1 BCH BCH 0 9月??25 10:24 cpuset lrwxrwxrwx 1 BCH BCH 0 9月??25 10:24 cwd -> /home/BCH/9_23//當前目錄 -r-------- 1 BCH BCH 0 9月??25 10:16 environ lrwxrwxrwx 1 BCH BCH 0 9月??25 10:16 exe -> /usr/bin/bash//一個進程,能夠找到自己的可執(zhí)行程序 dr-x------ 2 BCH BCH 0 9月??25 10:16 fd dr-x------ 2 BCH BCH 0 9月??25 10:24 fdinfo -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 gid_map -r-------- 1 BCH BCH 0 9月??25 10:24 io -r--r--r-- 1 BCH BCH 0 9月??25 10:24 limits -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 loginuid dr-x------ 2 BCH BCH 0 9月??25 10:24 map_files -r--r--r-- 1 BCH BCH 0 9月??25 10:24 maps -rw------- 1 BCH BCH 0 9月??25 10:24 mem -r--r--r-- 1 BCH BCH 0 9月??25 10:24 mountinfo -r--r--r-- 1 BCH BCH 0 9月??25 10:24 mounts -r-------- 1 BCH BCH 0 9月??25 10:24 mountstats dr-xr-xr-x 5 BCH BCH 0 9月??25 10:24 net dr-x--x--x 2 BCH BCH 0 9月??25 10:24 ns -r--r--r-- 1 BCH BCH 0 9月??25 10:24 numa_maps -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 oom_adj -r--r--r-- 1 BCH BCH 0 9月??25 10:24 oom_score -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 oom_score_adj -r--r--r-- 1 BCH BCH 0 9月??25 10:24 pagemap -r-------- 1 BCH BCH 0 9月??25 10:24 patch_state -r--r--r-- 1 BCH BCH 0 9月??25 10:24 personality -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 projid_map lrwxrwxrwx 1 BCH BCH 0 9月??25 10:24 root -> / -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 sched -r--r--r-- 1 BCH BCH 0 9月??25 10:24 schedstat -r--r--r-- 1 BCH BCH 0 9月??25 10:24 sessionid -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 setgroups -r--r--r-- 1 BCH BCH 0 9月??25 10:24 smaps -r--r--r-- 1 BCH BCH 0 9月??25 10:24 stack -r--r--r-- 1 BCH BCH 0 9月??25 10:16 stat -r--r--r-- 1 BCH BCH 0 9月??25 10:16 statm -r--r--r-- 1 BCH BCH 0 9月??25 10:16 status -r--r--r-- 1 BCH BCH 0 9月??25 10:24 syscall dr-xr-xr-x 3 BCH BCH 0 9月??25 10:24 task -r--r--r-- 1 BCH BCH 0 9月??25 10:24 timers -rw-r--r-- 1 BCH BCH 0 9月??25 10:24 uid_map -r--r--r-- 1 BCH BCH 0 9月??25 10:24 wchan
我們一般查看進程,還是優(yōu)先使用ps命令
工作目錄
工作目錄是指當前用戶所處的目錄,也稱為當前工作目錄或當前目錄。當你在終端中打開一個新的命令行窗口或者執(zhí)行一個命令時,你所處的目錄就是工作目錄。
你可以使用
pwd
命令(print working directory)來查看當前工作目錄的絕對路徑。你也可以使用cd
命令(change directory)來切換工作目錄到其他目錄。例如,如果你的當前工作目錄是 /home/user,那么在終端中執(zhí)行 pwd 命令會顯示 /home/user,執(zhí)行 cd Documents 命令會將工作目錄 切換到 /home/user/Documents。
工作目錄在 Linux 中非常重要,因為許多命令和操作都是基于當前工作目錄進行的。
總結(jié):
1)一個進程,能夠找到自己的可執(zhí)行程序
2)每一個進程,都有自己的工作目錄文章來源:http://www.zghlxwxcb.cn/news/detail-860775.html
???????如果大家還有不懂或者建議都可以發(fā)在評論區(qū),我們共同探討,共同學習,共同進步。謝謝大家! ???????文章來源地址http://www.zghlxwxcb.cn/news/detail-860775.html
到了這里,關(guān)于Linux 第十一章的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!