fork函式 多程序程式設計,其實也不是很難

2021-04-13 10:00:16 字數 2011 閱讀 5958

標籤:

fork函式

建立程序

fork函式

在linux

中,只有乙個函式可以建立子程序:

fork。

#include

#include

pid_t fork(void);

由fork

建立的新程序被稱為子程序(

child process

)。該函式被呼叫一次,但返回兩次。兩次返回的區別是子程序的返回值是

0,而父程序的返回值則是新子程序的程序

id。將子程序

id返回給父程序的理由是:因為乙個程序的子程序可以多於乙個,所以沒有乙個函式使乙個程序可以獲得其所有子程序的程序id。

fork

使子程序得到返回值

0的理由是:乙個程序只會有乙個父程序,所以子程序總是可以呼叫

getppid

以獲得其父程序的程序

id(程序

id 0

總是由交換程序使用,所以乙個子程序的程序

id不可能為

0 )。

子程序和父程序共享很多資源,除了開啟檔案之外,很多父程序的其他性質也由子程序繼承: •

實際使用者

id、實際組

id、有效使用者

id、有效組

id。 •

新增組id。

• 程序組

id。 •

對話期id。

• 控制終端。 •

設定-使用者-id

標誌和設定-組

-id標誌。 •

當前工作目錄。 •

根目錄。 •

檔案方式建立遮蔽字。 •

訊號遮蔽和排列。 •

對任一開啟檔案描述符的在執行時關閉標誌。 •

環境。 •

連線的共享儲存段。 •

資源限制。

父、子程序之間的區別是:

• fork

的返回值。 •

程序id。

• 不同的父程序

id。 •

子程序的tms_utime,tms_stime,tms_cutime以及tms_ustime設定為0。

• 父程序設定的鎖,子程序不繼承。 •

子程序的未決告警被清除。 •

子程序的未決訊號集設定為空集。 使

fork

失敗的兩個主要原因是:

( a )

系統中已經有了太多的程序

(通常意味著某個方面出了問題

),或者

( b )

該實際使用者

id的程序總數超過了系統限制。回憶表

2 - 7

,其中child_max

規定了每個實際使用者

id在任一時刻可具有的最大程序數。

fork

有兩種用法:

(1)

乙個父程序希望複製自己,使父、子程序同時執行不同的**段。這在網路服務程序中是常見的——父程序等待委託者的服務請求。當這種請求到達時,父程序呼叫

fork

,使子程序處理此請求。父程序則繼續等待下乙個服務請求。

(2)

乙個程序要執行乙個不同的程式。這對

shell

是常見的情況。在這種情況下,子程序在從

fork

返回後立即呼叫

exec。

我們從乙個例子程式中可以看到

fork

函式的作用,子程序與父程序之間的資源共享。

#include

#include

#include

int glob = 6;

char buf = "a write to stdout/n";

int main()

else if(pid == 0)

else

return 0; }

gdb 子程序 多程序 fork 除錯

標 題 faq 請問如何用gdb除錯子程序 發信站 bbs 水木清華站 mon may 19 18 17 02 2003 轉信 作個faq,在常見的x86平台上如何gdb除錯fork或者exec出來的子程序 1.在fork語句上設定斷點,修改fork返回的值。這種做法並沒有真正去 觸動已經存在的子程...

程序的基本操作,fork(),建立多程序。

fork用於新建乙個子程序,簡單的例子 include 提供open函式 include 該標頭檔案提供系統呼叫的標誌 include 該標頭檔案提供系統狀態資訊和相關函式 include 該標頭檔案提供程序i o操作的相關函式 include 標準函式庫 include 檔案操作相關函式庫 inc...

多程序程式設計

linux下乙個程序在記憶體裡有三部份的資料,就是 資料段 堆疊段 和 段 其實學過組合語言的人一定知道,一般的cpu象i386,都有上述三種段暫存器,以方便作業系統的執行。段 顧名思義,就是存放了程式 的資料,假如機器中有數個程序執行相同的乙個程式,那麼它們就可以使用同一 個 段。堆疊段存放的就是...