31 fork()函數在子程序中返回值為何?
(A) -1
(B) 1
(C) 母程序的pid
(D) 0
答案:登入後查看
統計: A(0), B(2), C(1), D(2), E(0) #3399878
統計: A(0), B(2), C(1), D(2), E(0) #3399878
詳解 (共 2 筆)
#7318880
【第一步:找關鍵字】
關鍵字:
-
fork()(建立新程序的系統呼叫)
-
子程序(child process)
-
返回值(return value)
? 重點:父子程序回傳值不同(必考!)
【第二步:白話翻譯】
這題在問:
? 「當你用 fork() 複製一個新程式時,在『子程式』裡面,fork() 會回傳什麼?」
【第三步:解題思路】
這題在考什麼觀念?
? fork() 的回傳值規則(超級必考)
解題步驟
-
記住 fork() 會產生兩個程序
-
父、子回傳值不同
-
分別記住
原理與規則(生活比喻)
把 fork() 想成「複製人」:
-
原本的人(父程序)
-
複製出來的人(子程序)
? 系統會告訴你「你是誰」
? 回傳規則:
| 程序 | fork() 回傳值 |
|---|---|
| 父程序 | 子程序的 pid |
| 子程序 | 0 |
| 失敗 | -1 |
【第四步:選項分析】
(A) 為什麼錯?
✘ 錯
-1 是:
? fork 失敗時才會出現
(B) 為什麼錯?
✘ 錯
沒有回傳 1 這種設計
(C) 為什麼錯?
✘ 錯
? 子程序不會拿到父程序 pid
? 這是常見誤解!
(D) 為什麼對?
✔ 正確(本題答案)
? 子程序中:
fork() 回傳 0
【觀念補充與延伸】
核心觀念定位
? 作業系統 / 行程管理(Process)
? 超高頻考點
fork() 完整記憶表(一定要背)
| 情況 | 回傳值 |
|---|---|
| 父程序 | 子程序 pid |
| 子程序 | 0 |
| 錯誤 | -1 |
典型程式寫法
ㅤㅤ
pid = fork();
if (pid == 0) {
// 子程序
} else if (pid > 0) {
// 父程序
}
if (pid == 0) {
// 子程序
} else if (pid > 0) {
// 父程序
}
ㅤㅤ
觸類旁通(舉一反三)
對比概念
-
fork vs exec
? fork:複製
? exec:取代程式
變化題型
-
問:父程序怎麼知道子程序的 pid?
? fork() 回傳值
【記憶口訣】
? 「子 0、父 pid、錯 -1」
【常見陷阱】
學生最容易搞混的地方
父子回傳值顛倒
心理盲點
以為子程序會知道父的 pid
避坑指南
? 記一句:
「子是新生,從 0 開始」
0
0