進程控制原理及程序設計

一進程控制原理

1
進程是一個具有一定獨立功能的程序的一次運行活動。
進程是運行着的程序。
2
特點
動態性,併發性,獨立性,異步性
3
狀態
就緒態,執行態,阻塞態
4
進程ID-PID
父進程ID-PPID
啓動進程的用戶-UID
5
進程互斥
當硬件或軟件資源不允許多個進程共同使用時就會產生互斥
6
臨界資源
臨界區:
7
進程同步:一組併發進程按《固定的順序》執行的過程稱爲進程間的同步。
8
進程調度:從一組進程中選一個來佔有CPU
調度方式:搶佔式和非搶佔式
9
調度算法:
先來先服務;短進程優先調度;高優先級優先調度;時間片輪轉法
時間片輪轉法:每個進程在時間片,進行輪轉執行。
10
死鎖:多個進程因競爭資源而形成的僵局。

實例:getpid.c、fork1.c、

fork_count

#include<unistd.h>
#include<stdio.h>
int main(void)
{
pid_t pid;
int count =0;
pid=fork();
count++;
printf("count=%d\n",count);
return 0;

}

上面,fork()後面的會被執行兩次,父進程和子進程各執行一次,但彼此數據獨立,so兩次count值相等。

結果是count=1 

count=1

vfork創建的父進程與子進程共用數據段

fork創建的父進程與子進程獨立,不共用數據段

#include<unistd.h>
#include<stdio.h>
int main(void)
{
pid_t pid;
int count =0;
pid=vfork();
count++;
printf("count=%d\n",count);
return 0;

}

count=1

count=2

問題:我的count=1

count=13623285而且還循環不停顯示

 

二進程控制程序設計1
獲取ID
2
父進程:說到父進程,要提到子進程,當進程創建進程時,創建的進程爲子進程,原來的進程爲父進程。
pid_t getpid(void)
pid_t getppid(void)
3
進程傳進
#include<unistd.h>
pid_t fork(void)
功能:創建子進程
代碼段是共享的,子進程會將其拷貝過來,故:下面的程序,父進程執行一次,子進程也執行一獨立
4
父進程和子進程的數據完全彼此。
5
vfork:子進程和父進程共享數據段
fork:父、子進程的執行次序不確定。
vfork:子進程先運行,父進程後運行
6
exec函數族
exec用《被執行的程序》替換《調用它的程序》。
fork創建新進程,產生一個新的PID
exec啓動一個新程序,替換原有進程,因此進程PID不會改變
7
execl//包含路徑
execlp//不包含路徑
execv(const char*path,char*const argv[])//含路徑,argv[]:被執行程序所需的命令行參數數組

實例

#include<unistd.h>
main()
{
execl("/bin/ls","ls","-al","/etc/passwd",(char*)0);
}

#include<unistd.h>

main()

{

char*argv[]={"ls","-al","/etc/passwd",(char*)0};

execv(“/bin/ls",argv);

}

#include<stdlib.h>

void main()

{

system("ls -al /etc/passwd");

}

 

 



8
system.c///system調用exec產生子進程
9

pid_t wait(int *status)//等帶其某個子進程退出。

實例

#include<sys/types.h>

#include<sys/wait.h>

#include<unistd.h>

#include<stdlib.h>

void mian()

{

pid_t pc,pr;

pc fork();

if(pc==0)

{

printf("This is chile process with pid of %d\n",getpid());

sleep(10);//睡眠10秒

}

else if(pid>0)//如果是父進程

{

pr=wait(NULL);

printf(“I catched a chile process with pid of %d\n”,pr);

}

exit(0);

 

 

}

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章