高级编程之进程(二)
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函数族
守护进程
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函数族
守护进程
相关文章推荐
- eclipse快捷键汇总
- 高通平台开机LOGO修改LK(bootloader)下实现
- C# 中 重载,重写,隐藏的区别
- java基础篇--01<基础>
- C++:抽象类(圆与正方形)
- 高级编程之进程(一)
- 高级编程之目录(二)
- java.lang.IllegalStateException: ScrollView can host only one direct child
- C++:多态性2(图形的面积)
- JavaEE 之 JPA 常见异常处理办法汇总
- 高级编程之目录(一)
- C语言实现strcpy
- 关于struts2的那点事
- 高级编程之文件I/O(二)
- C++:多态性1(动态联编测试)
- 高级编程之文件I/O(一)
- static关键字--java
- 学习Faster-RCNN (一)跑Faster-RCNN的python版demo
- php 中的 0 和 null
- Vector and ArrayList in Java