国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

fork()函數(shù) UNIX編程中fork()的使用是怎樣的原理?

UNIX編程中fork()的使用是怎樣的原理?首先解釋一下:在UNIX/Linux中,父進(jìn)程調(diào)用fork生成子進(jìn)程,父進(jìn)程打開的文件描述符會(huì)被復(fù)制到子進(jìn)程中,子進(jìn)程通過父進(jìn)程復(fù)制的文件描述符與父進(jìn)程共

UNIX編程中fork()的使用是怎樣的原理?

首先解釋一下:在UNIX/Linux中,父進(jìn)程調(diào)用fork生成子進(jìn)程,父進(jìn)程打開的文件描述符會(huì)被復(fù)制到子進(jìn)程中,子進(jìn)程通過父進(jìn)程復(fù)制的文件描述符與父進(jìn)程共享打開文件的文件條目。為什么要分享?考慮到實(shí)際問題,在類UNIX操作系統(tǒng)中生成新進(jìn)程的唯一方法是fork調(diào)用。大多數(shù)fork調(diào)用只有兩個(gè)目的:1)一個(gè)進(jìn)程創(chuàng)建自己的副本來(lái)實(shí)現(xiàn)多進(jìn)程模型,需要共享打開的文件描述符來(lái)進(jìn)行同步。2) Fork是一個(gè)子進(jìn)程,它調(diào)用exec函數(shù)來(lái)執(zhí)行新進(jìn)程??紤]在命令行中執(zhí)行程序的方法。所有程序都是shell fork并調(diào)用exec的子進(jìn)程。因此,可以直接使用stdin、stdout、stderr等環(huán)境變量。

為了解決您的問題:“fork之后,我們將調(diào)用exec來(lái)執(zhí)行另一個(gè)程序。此時(shí),我們將用一個(gè)新程序替換子進(jìn)程的主體、數(shù)據(jù)、堆和堆棧。在這種情況下,子進(jìn)程的文件描述符表所占用的內(nèi)存將自動(dòng)釋放。為什么我們還有是否關(guān)閉子進(jìn)程的文件描述符?”文件描述符由內(nèi)核維護(hù),并在任何情況下通過引用計(jì)數(shù)技術(shù)由內(nèi)核釋放。因此,exec不會(huì)影響內(nèi)核中的文件表?xiàng)l目,因此不會(huì)影響進(jìn)程打開的文件描述符表。Only fork只是將父進(jìn)程打開的文件描述符復(fù)制到子進(jìn)程,然后父子進(jìn)程共享文件表?xiàng)l目。

最后,您可以設(shè)置Exec位上文件的關(guān)閉,以在執(zhí)行Exec時(shí)關(guān)閉文件描述符。