Process
getpid 是如何工作的?
系統呼叫返回呼叫程序的
getpid
程序id。核心如何確定哪個程序正在呼叫系統呼叫?
核心進行作業調度並提供系統呼叫。
當一個程序執行時,核心調度它的執行時間——尤其是它為它分配一個PID——這樣的資訊被儲存在核心地址空間中,在資料結構中(例如在一個任務結構中)。
因此,當一個程序呼叫
getpid()
系統呼叫時,核心只需要查看呼叫(即目前正在執行的)程序的任務結構。
執行系統呼叫時,有一個權限切換,即允許執行的程式碼執行更多的指令並訪問使用者態程式碼禁止的數據。
然而,沒有程序上下文切換,因此核心程式碼仍在呼叫程序上下文中執行。這意味著核心不需要搜尋哪個程序正在呼叫它,它已經知道了。getpid 系統呼叫程式碼只是從指向包含其自己的程序/執行緒特定資訊的內部結構的指針中檢索程序 ID。該結構依賴於作業系統實現。
例如對於 Illumos (OpenSolaris),該結構被命名為 proc: http ://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/sys/proc.h#131