您的位置:首页 > 编程语言

高级编程之进程(二)

2016-01-22 14:05 267 查看
进 程

1、进程的退出

return ===>只有在main函数中执行才能将进程退出。

exit() ===》进程退出函数,会自动刷新缓存区。

_exit(); ===》强制退出进程,不会刷新缓存区。

2、特殊进程

2.1 孤儿进程 ===》父进程退出,而子进程单独存在。

子进程变成孤儿进程。

2.2 僵尸进程 ===》父进程存在,子进程退出。

父进程没有回收子进程资源,

子进程变成僵尸进程。

2.3 守护进程 ===》父进程变为init子进程,并且脱离终端

控制的后台服务程序。

3、进程的资源回收。

头文件:

#include <sys/types.h>

#include <sys/wait.h>

3.1 wait

原型:pid_t wait(int *status);

功能:用于回收子进程的退出后资源。

该函数具有阻塞等待功能,一般用于创建者进程使用

可以任意回收子进程,不限制次序。

参数:status 要回收的子进程退出状态

如果不关心子进程的退出状态用NULL表示。

如果要回收状态需要事先定义变量,

并用 WEXITSTATUS(status)来转换回收的资源。

返回值:成功 回收的子进程pid

失败 -1;

3.2 waitpid

原型:pid_t waitpid(pid_t pid, int *status, int options);

功能:可以指定回收pid进程的退出资源。

参数:pid 要回收资源的子进程pid

status 子进程退出时候的状态

options 回收方式: 0 表示阻塞方式回收

WNOHANG 非阻塞方式回收。

返回值:成功 回收的子进程pid

失败 -1;

练习:

设计一个多进程程序,完成如下功能:

进程1:读主函数传参的第一个参数的文件内容并打印。

进程2:读主函数传参的第二个参数的文件内容并打印。

依次类推,有几个参数就fork几个进程并完成文件操作。

./a.out 1.txt 2.txt ===>分别用两个进程打印各自文件内容。

进程exec函数族

守护进程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: