wait(意指“等待”)为类UNIX操作系统系统调用

功能

编辑

多进程系统内的进程(或任务)有时需要等待其他进程以完成自己的执行过程,而在包含父-子进程机制的类UNIX系统中,父进程能创建可独立运行的子进程,并在需要时调用wait(函数声明为pid_t wait(int *stat_loc))以使自己在子进程执行过程中保持休眠状态。当任一子进程结束后,该子进程会向操作系统返回一个退出状态,而后系统即向休眠中的父进程发送一个SIGCHLD信号以提醒之,至此父进程“复苏”并从内核获取子进程的退出状态,而后内核释放原有子进程所占用的资源,父进程也继续执行。

衍生

编辑

对于带有线程机制的类UNIX系统来说,对于线程调度也有对应wait的实现:pthread_join会让当前进程强制休眠,等待指定线程执行完毕后再继续执行。

类UNIX系统还提供多种wait的衍生调用(如waitpidwaitid)以扩展适用范围。借助于这些变种,父进程可以休眠至任一子进程结束,也可以等待满足指定条件(如匹配给定的进程标识符)的子进程结束后再继续执行。另外,若利用额外选项做参数,waitpidwaitid在指定进程继续运行或暂停执行时也会返回。

僵尸进程

编辑

即使没有提前调用wait,在任一进程终止后,系统内核都会向其父进程发送SIGCHLD,这时父进程可以选择使用SIG_IGN作为处理函数,令内核知晓自己不需获得状态,并直接交由init进程处理;亦可调用wait,则立即返回子进程退出状态。若两者皆不做,则子进程在进程表中占用的资源就无法得到释放,进而成为僵尸进程,持续浪费资源[1]。为解决这一问题,系统常以特殊进程reaper(“收割者”)定位僵尸进程,并获取其状态以使系统可以解除资源分配,从而“收割”之[2]

参见

编辑

参考来源

编辑
  1. ^ M. Tim Jones. Gnu/Linux Application Programming. Cengage Learning. 2005: 178. 
  2. ^ Scott Mann, Ellen L. Mitchell. Linux System Security: An Administrator's Guide to Open Source Security Tools. Prentice Hall Professional. 2000: 167. 

📚 Artikel Terkait di Wikipedia

C POSIX library

<search.h> 搜索表 Issue 1 <semaphore.h> POSIX 信号量 Issue 5 <spawn.h> spawning(英语:Spawn (computing))子进程 Issue 6 <strings.h> 大小写不敏感字符串比较 Issue 4 <stropts.h>

American fuzzy lop

american fuzzy lop面临的一大挑战是每秒对几百个进程的spawn(英语:spawn (computing))。除了从头开始spawn每个进程的原始引擎,american fuzzy lop提供高度依赖fork系统调用的默认引擎。

并行编程模型

bridging models: (1) Spawn-based multi-threading (Spawn-MT): This is based on (asynchronous, or synchronous) nesting-free Spawn-Join commands. This is

Fork (系统调用)

误状态可能被复制给子进程。因此在这里使用了进程“产卵”(spawning)之隐喻:新进程的每个组件的内存布局都是重新创建的。spawn(英语:Spawn (computing))后来被微软的操作系统采用(1993年)。 VM/CMS(OpenExtensions)的POSIX兼容组件提供了一个非常

Process.h

spawnlp, spawnlpe(英语:spawn (computing)) 装入并执行新的子进程。参数单独传递。 DOS,Win,OS/2 spawnv, spawnve, spawnvp, spawnvpe(英语:spawn (computing)) 装入并执行新的子进程。参数作为指针数组传递

分叉会合模型

Building Blocks)(TBB)。Cilk编程语言有对fork和join的语言级别支持,其形式为spawn和sync关键字或Cilk Plus中的cilk_spawn和cilk_sync。 电脑程式设计主题 并行编程模型 Fork (系统调用) 共享内存并行的矩阵乘法算法(英语:Matrix

线程

。实现线程安全的常见策略包括使用同步原语保护共享数据、使用线程局部存储以及设计无状态或不可变的数据结构。 執行緒有四種基本狀態,分別為: 產生(spawn) 阻塞(block) 非阻塞(unblock) 結束(finish) 线程内核对象(thread kernel object) 线程环境块(thread

1995年电子游戏界

Dave. The day our world changed. Market for Home Computing and Video Games(英语:Market for Home Computing and Video Games). Intent Media. 2005-09-29 [2015-04-15]