进程fork和exec ---Unix网络编程笔记
进程fork和exec ---Unix网络编程笔记
- fork
- 一次调用,两次返回
- fork的两个典型用法
- 最简单的并发服务器---fork子进程
- exec
—Unix网络编程笔记)
fork
#include <unistd.h>
pid_t fork(void);
一次调用,两次返回
fork在父进程中返回子进程的进程ID号,fork在子进程返回0。返回值告知当前进程是子进程还是父进程。
子进程如果想得到父进程的进程ID,可以调用getppid。
fork的两个典型用法
(1)一个进程创建一个自身的副本。
(2)一个进程想要执行另一个程序。该进程首先调用fork创建一个自身的副本,然后其中一个副本(子进程)调用exec把自身换成新的程序。
最简单的并发服务器—fork子进程
pid_t pid;
int listenfd,connfd;
listenfd = socket(...);
bind(listenfd,...);
for(;;){connfd = accept(listen,...);if( (pid = fork() ) == 0){close(listenfd); //关闭子进程的listen套接字描述符doit(connfd); //子进程的操作close(connfd); //关闭子进程的connfd套接字描述符exit(0); //处理完毕,退出子进程}close(connfd); //关闭父进程的connfd套接字描述符
}
每个文件或者套接字都有一个引用计数,它代表 当前打开着的 引用该文件或者套接字的 描述符的 个数。
fork函数执行之前父进程打开了 listenfd 和 connfd,因此这两个套接字的引用计数都是1。
forl函数执行之后,子进程复制父进程的资源,子进程中同样也有listen 和 connfd 套接字描述符,因此这两个套接字的引用计数都变成 2。
当父进程关闭connfd 套接字 ,子进程关闭listen套接字之后,这两个套接字的引用计数又重新变成1。
套接字真正的清理和资源释放要等到引用计数到达0时才发生。
exec
存放在硬盘上的可执行程序文件能够被Unix执行的唯一方法:由一个现有进程调用6个exec函数中的某一个。exec将当前进程映像替换成新的程序文件,而且该新程序通常从main函数开始执行。
称调用exec函数的进程为调用进程,新执行的程序称为新程序。
六个exec函数之间的区别:
(1)待执行的程序文件是由文件名还是由路径名指定
(2)新程序的参数是一一列出还是有一个指针数组来引用
(3)把调用进程的环境传递给新程序还是新程序指定新的环境
只有execve是内核中的系统调用,其他五个都是调用execve的库函数。
进程fork和exec ---Unix网络编程笔记相关推荐
- UNIX网络编程笔记(3):简单的并发服务器
上一讲中的简单时间获取服务器是一个迭代服务器,对于获取时间来说够用了.迭代服务器有这样的特点:同一时间只能给一个客户服务.也就是说,如果某一时刻服务器与某个客户正在连接,其它客户必须等到上一个客户与服 ...
- UNIX网络编程笔记(2):一个简单的时间获取程序
这一讲通过一个简单的时间获取程序简单介绍套接字编程. 1.套接字API 1.1.套接字地址结构 上一讲中介绍了TCP的一些内容,知道了一个套接字对唯一标识了网络中的一个TCP连接,而一个套接字标识了一 ...
- UNIX网络编程笔记(4):简单的回射程序
上一讲中我们通过调用fork函数实现了一个简单的并发时间获取服务器.这是一个简单的并发服务器框架,然而这里使用这个框架实现一个简单的回射服务器会出现一个问题,这个问题就是僵尸子进程. 1.回射程序 下 ...
- UNIX网络编程笔记(7):回射程序的UDP版本
1.UDP简介 UDP是一个简单的传输层协议,应用进程往一个UDP套接字写入数据,随后被封装到一个UDP数据报,进而又被封装到一个IP数据报,然后发送到目的地.UDP不保证UDP数据报会最终到达目的地 ...
- UNIX网络编程笔记(6):I/O复用之select函数
上一讲中我们正确处理了僵尸子进程,使得这个简单的服务器更加健壮.不幸的是,这个程序仍然有问题.想象一下,如果一个客户正在和一个服务器子进程连接建立完毕正在通话,而服务器子进程意外终止(比如kill), ...
- UNIX网络编程笔记(1):TCP简介
1.简介 TCP(Transmission Control Protocol),即传输控制协议,是一种面向连接的.可靠的.基于字节流的传输层通信协议.TCP协议有以下几个特点: TCP提供客户与服务器 ...
- 《UNIX网络编程 卷1:套接字联网API》学习笔记——基本TCP套接字编程
UNIX网络编程--基本TCP套接字编程 socket 函数 connect 函数 bind 函数 listen 函数 accept 函数 fork 和 exec 函数 并发服务器 close 函数 ...
- UNIX网络编程学习笔记(代码超详细解析)(持续更新)
1. 其他函数准备 1. TCP 回射服务器程序: str_echo 函数 #include "unp.h"void str_echo(int sockfd) {ssize_t n ...
- UNIX网络编程--读书笔记
会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...
最新文章
- Google和网易有道合作开课了
- Centos7下安装apache2.4 php5.6 pdo_oci oci8
- linux下arp***的解决方案[转]
- springaop事务逻辑原理_架构师:一篇文章掌握——Spring 事务管理
- 通过一个简单的例子学习Angular Injection Token工作原理
- 【专栏必读】(计算机组成原理题目题型总结)计理期末考试408统考算机组成原必考题型总结
- VNC Viewer连接成功后闪退的解决办法
- 计算机硬件配置及安装,电脑硬件及电脑配置知识大全
- 《那些年啊,那些事——一个程序员的奋斗史》二
- php 后天的时间戳,Linux中时间戳转换命令
- 基于微信小程序的智慧党史系统源码【包调试】
- 计算机应用技术python_大学计算机应用技术02PythonB2020学习通app网课答案
- dribbble加速vpn_关于Dribbble设计的几点思考
- 华清远见嵌入式c语言学习笔记
- Unity Shader 之遮挡透明
- 2029. 石子游戏 IX(C++解法与思路)
- 图集谷-写真集-爬虫-2.0
- PyDev开发环境搭建
- 战地3点加入服务器无响应,战地3服务器设置
- NXP i.MX 8M Plus工业开发板硬件说明书( 四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)