2008-09-12 64 views
2

我目前在操作系統課上,我的老師花了一半的時間討論PID。許多人都知道,她提到流程知道其父母的身份。是否有孩子的PID?

我的問題是這樣的:

一個進程的PCB是否知道它的孩子的ID?如果是這樣,那麼獲得它的途徑是什麼?

回答

5

據我所知,一個進程沒有明確的子進程PID列表,但它可以很容易地建立,因爲一個進程應該知道它產生的子進程。例如,UNIX fork()調用返回父進程中的子PID和子進程中的0,Windows上的CreateProcess()返回(IIRC)創建的新進程的PID。

3

當您在* nix上使用fork()時,返回值是父進程中子進程的PID,子進程中爲0。這是找出答案的方法之一。不知道他們是否跟蹤進程產卵的「樹」,我認爲這取決於你使用的操作系統,但是因爲當你殺死bash(或任何shell)時,所有正在運行的孩子也會被殺死,所以我認爲像系統一樣,UNIX也會跟蹤這一點。

2

如果您使用的是Linux或任何實現Unix API的程序,當進程調用fork()來創建子進程時,父進程將接收子進程PID作爲返回代碼,如果fork失敗,則返回-1。子進程獲得一個零返回碼。

1

Process的PCB知道其孩子的ID。

正如我們所知,Fork()用於創建進程。它不需要參數並返回進程ID。創建新的子進程後,父進程和子進程都將執行fork()後面的下一條指令。 在那裏,我們必須區分父項和子項。這可以通過測試fork()的返回值來完成。

如果Fork()返回負值,則子進程的創建不成功。 如果Fork()將零返回給新創建的子進程。 如果Fork()將正值作爲子進程的進程ID返回給父進程。