Linux下程序的建立
阿新 • • 發佈:2020-12-10
程序
前言
程序在計算機中是不可或缺的一部分,是系統資源分配和排程的基本單位,程序是程式執行的實體。
一、程序是什麼?
程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。
程式:程式是靜態,儲存在磁碟中的有序指令的集合(檔案:可以在計算機中去執行) 程序:程式執行的過程。抽象的概念,動態的執行過程(需要進行程序的建立、排程、消亡)。
二、如何建立程序
1.使用fork函式建立程序
fork函式原型如下():
#include <unistd.h>
pid_t fork(void);
在Linux系統中,建立一個子程序需要用到fork();需要引用標頭檔案unistd.h;main函式是父進,在fork函式之後通過判斷fork函式的返回值來判斷哪一部分程式碼是子程序模組的,返回值為0的為子程序,大於0的為父程序,後面程式碼部分為公共部分。
2.程式碼例項
程式碼如下(示例):
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
printf("111\n");
pid_t pid = fork();
if(pid==0)
{
printf("這是子程序\n");
}
if(pid > 0 )
{
printf("這是父程序\n");
}
printf("222\n");
return 0;
}
以上是上面的程式碼的執行結果;從以上結果可以看到“111”只被列印了一次,“222”列印了兩次,列印“111”的時候還沒建立子程序,只有主程序進行一次列印,fork之後建立了子程序,子程序括號部分執行完了並沒有結束程序,又執行列印了“222”,父程序和子程序各列印一次,所以列印了兩次“222”;可能每次列印的順序不一樣,但內容是一樣的。
總結
退出程序用exit()函式,退出子程序不會影響父程序,子程序未退出而父程序退出,則子程序變成孤兒程序。
fork:
- 在建立子程序成功,父子程序的執行順序是隨機的(程式設計師無法控制)
- 在建立一個子程序的時候,子程序會複製拷貝父程序中的所要資源,他們各自訪問的是獨立的空間
- 在建立程序的時候,需要建立空間(效率不能保證),如果需要提高效率,同時父子程序訪問同一空間使用vfork來實現:
vfork:
- 在建立子程序,父程序阻塞,子程序退出,父程序才會執行;
- 父子程序共享同一物理空間的資料。
- 在退出程序的時候,需要使用exit退出;