1
是否可以用克隆模擬vfrok的行爲?到目前爲止,我有Simulatin vfork與克隆
pid=clone(fn,cStack,SIGCHLD|CLONE_FS | CLONE_FILES | CLONE_VM | CLONE_VFORK,NULL);
但我仍然需要通過我自己的堆棧,因此新工藝在不同的堆棧幀,但在相同的地址空間(因爲CLONE_VM的)工作,並按照我的理解,如果我調用vfork並且不使用exec中的某個函數,新進程在與父進程相同的地址空間中運行,並且它使用相同的堆棧幀。
那麼是否有可能使用克隆的新進程在同一地址空間中運行,並且使用與父進程相同的堆棧幀?
+1指出堆棧錯綜複雜。但爲什麼手冊非常隨意地指出'vfork()是clone(2)'的特例?這似乎表明''vfork''可以用'clone'實現? – 2012-04-06 13:03:17
它可以很容易地用'clone' * syscall *實現。但是當你打算共享堆棧時,你不能像這樣打包C函數調用。您必須在asm中編寫'vfork'的基於克隆的版本。 – 2012-04-06 13:04:56
所以如果我理解正確,離克隆函數最近的vfork就是我寫在第一篇文章中的調用?我得到了相同的內存空間,停止父節點,直到子節點退出,共享文件描述符表和相同的文件系統信息,但它們不像vfork那樣共享堆棧? – Andna 2012-04-06 14:01:38