官术网_书友最值得收藏!

fork()

Fork() is one of the core "Unix thread APIs" available across *nix systems since the inception of legacy Unix releases. Aptly named, it forks a new process from a running process. When fork() succeeds, the new process is created (referred to as child) by duplicating the caller's address space and task structure. On return from fork(), both caller (parent) and new process (child) resume executing instructions from the same code segment which was duplicated under copy-on-write. Fork() is perhaps the only API that enters kernel mode in the context of caller process, and on success returns to user mode in the context of both caller and child (new process).

Most resource entries of the parent's task structure such as memory descriptor, file descriptor table, signal descriptors, and scheduling attributes are inherited by the child, except for a few attributes such as memory locks, pending signals, active timers, and file record locks (for the full list of exceptions, refer to the fork(2) man page). A child process is assigned a unique pid and will refer to its parent's pid through the ppid field of its task structure; the child’s resource utilization and processor usage entries are reset to zero.

The parent process updates itself about the child’s state using the wait() system call and normally waits for the termination of the child process. Failing to call wait(), the child may terminate and be pushed into a zombie state.

主站蜘蛛池模板: 卫辉市| 土默特左旗| 屯昌县| 惠来县| 黎川县| 驻马店市| 四川省| 韶山市| 盐山县| 壤塘县| 土默特右旗| 贵阳市| 汪清县| 高雄市| 青浦区| 昂仁县| 康马县| 凤城市| 宿州市| 尼玛县| 北宁市| 铁岭市| 新余市| 青神县| 屏东县| 瑞丽市| 乌恰县| 雅江县| 临朐县| 枣强县| 恭城| 汝阳县| 瑞昌市| 临汾市| 广平县| 琼中| 安多县| 信阳市| 温州市| 临西县| 石泉县|