31 fork()函數在子程序中返回值為何?
(A) -1
(B) 1
(C) 母程序的pid
(D) 0

答案:登入後查看
統計: A(0), B(2), C(1), D(2), E(0) #3399878

詳解 (共 2 筆)

#7318880

【第一步:找關鍵字】

關鍵字:

  • fork()(建立新程序的系統呼叫)

  • 子程序(child process)

  • 返回值(return value)

? 重點:父子程序回傳值不同(必考!)

【第二步:白話翻譯】

這題在問:

? 「當你用 fork() 複製一個新程式時,在『子程式』裡面,fork() 會回傳什麼?」

【第三步:解題思路】

這題在考什麼觀念?

? fork() 的回傳值規則(超級必考)

解題步驟

  1. 記住 fork() 會產生兩個程序

  2. 父、子回傳值不同

  3. 分別記住

原理與規則(生活比喻)

把 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) {
// 父程序
}
ㅤㅤ

觸類旁通(舉一反三)

對比概念

  • fork vs exec
    ? fork:複製
    ? exec:取代程式

變化題型

  • 問:父程序怎麼知道子程序的 pid?
    ? fork() 回傳值

【記憶口訣】

? 「子 0、父 pid、錯 -1」

【常見陷阱】

學生最容易搞混的地方

父子回傳值顛倒

心理盲點

以為子程序會知道父的 pid

避坑指南

? 記一句:

「子是新生,從 0 開始」

0
0
#6786492
題目解析 fork() 函數是 UNI...
(共 896 字,隱藏中)
前往觀看
0
0