linux应用之----进程控制理论
進程理論基礎
進程的定義:進程是一個具有特定功能的程序的一次運行活動。它和程序的區別在于:程序是存儲在硬盤上的,是靜態的;而進程是程序的執行。
進程特點:動態性?,并發性?,獨立性?,?異步性?。
進程三態:就緒態,執行態,阻塞態。
進程的標識:用進程ID號來區分不同的進程。進程ID用PID表示,父進程ID用PPID表示,用戶ID用UID表示。
進程互斥:是指當多個進程都要使用某一共享資源時,任何時刻做多允許一個進程使用,其它要使用該資源的進程必須要等待,直到占有該資源的進程結束為止。
臨界資源:操作系統講一次只允許一個進程訪問的資源稱為臨界資源。
臨界區:程序中,訪問臨界資源的那段代碼稱為臨界區。
進程同步:一組并發進程按一定色順序執行的過程稱為進程的同步。具有同步關系的一組進程稱為合作進程,合作進程之間互相發送的信號稱為消息或事件。
進程調度:按一定的算法,從一組待運行的進程中選出一個來占用CPU。調度方式有搶占式和非搶占式兩種。調度的算法有:先來先服務調度算法;短進程優先調度算法;高優先級優先調度算法;時間片輪轉法。
死鎖:多個進程因競爭資源而導致的一種僵局,若無外力作用,這些進程都將永遠不能向前推進。
進程控制編程
1:獲取ID
???????#include<sys/types.h>
??????#include<unistd.h>
???????pid_t?getpid(void);????//獲取當前運行的進程的ID號
???????pid_t?getppid(void);???//獲取當前運行進程的父進程的ID號。
2:?fork?函數
????????????????int???fork()
1)?返回值-1,出錯。
2)?返回值?0,表示子進程
3)?否則為?父進程,且該返回值是子進程的pid。
????3?:vfock?函數
????????????????int??vfork()
1)?返回值-1,出錯。
2)?返回值?0,表示子進程
3)?否則為?父進程,且該返回值是子進程的pid
4)?vfork?與?fork?區別:vfork必定是子進程先執行完,父進程再執行,fork則不一定;vfork中子進程與父進程共用數據段,所以變量之間相互影響,fork函數從父進程拷貝了一段數據段,所以不會有影響。
4:?wait(null)與waitpid(pid,null,0)函數。
頭文件為?#include?<sys/types.h>?和?#include<sys/wait.h>
????用于阻塞一個進程。如果是wait,那么只有當該進程的某個子進程退出以后,它才會繼續執行。而waitpid則指定了子進程的ID,只有這個指定ID的子進程結束了,它才會繼續執行。
????5:?exec函數族
exec用指定的程序替換調用它的程序。和fork的區別:fork是產生了一個新的進程,新進程的ID號是新的。而exec是替換進程,并且替換之后,進程的ID號不會變。
#include?<unistd.h>
execl("bin/ls","ls","-l","etc/password",char?*0);
execlp("ls","ls","-l","etc/password",char?*0);
以上兩個函數,它們的第一個參數為被執行的程序名。所不同的是exexl必須有完整的路徑名稱。而execlp則不需要完整的路徑名稱,它會到系統的path路徑去尋找。后面的參數就是執行這個命令所需要的參數。最后一個參數以空指針結尾。
execv("bin/ls",argv);?其中char?*argv[]={"ls","-l","etc/password",char?*0};也就是說execv把execl后面的參數以及最后的空指針都用一個字符串數組給代替了。
總結
以上是生活随笔為你收集整理的linux应用之----进程控制理论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米9如何预定(我的小米云服务)
- 下一篇: linux应用之----进程通信