1. 程式人生 > 其它 >Linux下程序的建立

Linux下程序的建立

技術標籤:Linux程序執行緒linux多程序

程序




前言

程序在計算機中是不可或缺的一部分,是系統資源分配和排程的基本單位,程序是程式執行的實體。


一、程序是什麼?

程序(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:

  1. 在建立子程序成功,父子程序的執行順序是隨機的(程式設計師無法控制)
  2. 在建立一個子程序的時候,子程序會複製拷貝父程序中的所要資源,他們各自訪問的是獨立的空間
  3. 在建立程序的時候,需要建立空間(效率不能保證),如果需要提高效率,同時父子程序訪問同一空間使用vfork來實現:

vfork

  1. 在建立子程序,父程序阻塞,子程序退出,父程序才會執行;
  2. 父子程序共享同一物理空間的資料。
  3. 在退出程序的時候,需要使用exit退出;