Re: [問題] fork回傳的值

看板LinuxDev作者 (真.粽子無雙)時間20小時前 (2026/02/23 17:14), 編輯推噓2(201)
留言3則, 1人參與, 20小時前最新討論串2/2 (看更多)
※ 引述《ttucse ((((>( ̄▽ ̄)<))))》之銘言: : 我在讀minix的那本作業系統教科書 : 讀到system call的部分 : 介紹呼叫fork時 : 書上寫 : 回傳的值如果是0代表目前的行程是子行程 : 如果是正整數則代表目前的行程是父行程 : 回傳的值是子行程的pid : 我不懂的點是 : 你呼叫fork時 : 目前的行程一定是父行程吧 : 父行程產生一個子行程 : 然後回傳子行程pid : 怎麼會有回傳0 : 表示目前是子行程的情況 因為呢 當呼叫fork()時 系統將目前父行程"拷貝"出一個新的行程 所以~ 當然! 他們這兩個行程的"目前程式執行位置"(也就是ECS:EIP or PC 暫存器)也是一模一樣 的,你可以想像他們目前這兩個行程的"目前執行位置"都在fork()函式裡面 然後兩個行程開始繼續跑,也就是說這兩個父子行程都會從fork() 函式返回 系統核心自動會將父行程fork()返回值填入子行程的pid, 子行程的fork()返回值 填入0 所以,檢查fork()的返回值,就可以知道目前這個行程是父還是子 一般人當接觸的時候, 很難理解為什麼生出子行程後子行程一樣從fork()返回, 直覺上,人類會認為既然fork(), 那子行程自然要從我指定的,或是程式的main() ,或是我指定的另一個elf檔案開始執行.但,UNIX的fork()設計就是如此,fork() 本質上一個行程的"當下的拷貝",連"目前程式執行位置"也是原樣拷貝 因此,父子倆行程的程式執行必定都從fork()返回 希望有幫助到你 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.98.66 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1771838085.A.8E5.html

02/23 17:32, 20小時前 , 1F
我懂了。非常感謝你。我以為這個板很久沒文章,會沒什麼人
02/23 17:32, 1F

02/23 17:32, 20小時前 , 2F
看了。沒想到你這麼快回答我。
02/23 17:32, 2F

02/23 17:35, 20小時前 , 3F
PC是Program Counter是不是,如果我沒記錯。
02/23 17:35, 3F
文章代碼(AID): #1fd1g5Zb (LinuxDev)
文章代碼(AID): #1fd1g5Zb (LinuxDev)