Linux
為什麼複製包裝器需要堆棧參數?
我一直在仔細閱讀 clone() 的 linux 手冊頁,並且我了解 clone() 包裝器和“原始”系統呼叫之間的區別。但是我不明白的是為什麼父程序需要為子程序分配一個堆棧,即使包裝器中沒有使用CLONE_VM。
如果不使用 CLONE_VM,包裝器是否會簡單地忽略堆棧參數?那為什麼還需要它呢?原始系統呼叫允許它為空,這是有道理的,但我不明白為什麼包裝器需要這個。即使您不告訴它,包裝器也會讓孩子和父母共享記憶體嗎?
所需的堆棧參數與參數
fn
密切相關。原始核心系統呼叫並不總是需要堆棧,因為它的行為類似於fork
:在子系統呼叫返回時開始執行。然後,libc 包裝器需要對 call 進行設置fn
,為此,它需要堆棧(並且一直這樣做)。因此,呼叫包裝器時總是需要一個堆棧,以便通過
clone
系統呼叫將資訊傳遞給呼叫fn
函式的程式碼(thread_start
在 glibc 程式碼中)。