- Mastering Linux Kernel Development
- Raghu Bharadwaj
- 242字
- 2021-07-08 09:47:18
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.
- Dynamics 365 for Finance and Operations Development Cookbook(Fourth Edition)
- Node.js 10實戰
- 摩登創客:與智能手機和平板電腦共舞
- OpenCV for Secret Agents
- INSTANT MinGW Starter
- 精通API架構:設計、運維與演進
- Essential Angular
- CKA/CKAD應試教程:從Docker到Kubernetes完全攻略
- FLL+WRO樂高機器人競賽教程:機械、巡線與PID
- Python數據可視化之Matplotlib與Pyecharts實戰
- Spring Boot企業級項目開發實戰
- 區塊鏈技術與應用
- 零基礎學C語言(升級版)
- Android系統下Java編程詳解
- Get Your Hands Dirty on Clean Architecture