Linux系统编程——进程退出及状态回收
Linux系统编程——进程退出及状态回收
exit和_exit
exit
void _exit(int status);
所需头文件:stdlib.h
功能:使进程终止运行,清除其使用内存空间、并销毁其在内核中的各种数据结构
status:退出状态码
exit
void exit(int status);
所需头文件:unistd.h
功能:除了_exit的功能外,还会刷新缓冲区,把文件缓冲区内容写回文件。
status:退出状态码
返回值
通常0表示正常退出,非0表示异常退出。
wait和waitpid
wait
pid_t wait(int* wstatus);
所需头文件:sys/types.h、sys/wait.h
功能:使进程阻塞,直到任一子进程结束或该进程收到一个信号为止。如果该进程没有任何子进程或子进程已结束,会立即返回。
wstatus:子进程退出状态码,可以为NULL,为NULL表示忽略子进程退出状态
返回值:成功返回子进程的进程ID,失败返回-1。
waitpid
pid_t waitpid(pid_t pid, int* wstatus, int options);
所需头文件:sys/types.h、sys/wait.h
功能:和wait相似,可以指定等待某个子进程结束以及等待的方式(阻塞或非阻塞)。
pid:要等待的子进程ID
wstatus:子进程退出状态码,可以为NULL,为NULL表示忽略子进程退出状态。
options:等待方式
返回值:
正常:结束的子进程的进程号
使用选项WNOHANG且没有子进程结束时:0
失败返回-1
pid取值
| 范围 | 说明 |
|---|---|
| pid > 0 | 只等待ID等于pid的子进程,不管已经有其他子进程运行结束退出了,只要指定子进程还没有结束,waitpid就会一直等下去。 |
| pid = -1 | 等待任何一个子进程退出,此时和wait作用一样 |
| pid = 0 | 等待其组ID等于调用进程的组ID的任一进程。 |
| pid < -1 | 等待其组ID等于pid的绝对值的任一子进程 |
options取值
| 值 | 说明 |
|---|---|
| WNOHANG | 若由pid指定的子进程并不立即可用,则waitpid不阻塞,此时返回值为0 |
| 0 | 同wait,阻塞父进程,等待子进程退出。 |
