进程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网络编程笔记相关推荐

  1. UNIX网络编程笔记(3):简单的并发服务器

    上一讲中的简单时间获取服务器是一个迭代服务器,对于获取时间来说够用了.迭代服务器有这样的特点:同一时间只能给一个客户服务.也就是说,如果某一时刻服务器与某个客户正在连接,其它客户必须等到上一个客户与服 ...

  2. UNIX网络编程笔记(2):一个简单的时间获取程序

    这一讲通过一个简单的时间获取程序简单介绍套接字编程. 1.套接字API 1.1.套接字地址结构 上一讲中介绍了TCP的一些内容,知道了一个套接字对唯一标识了网络中的一个TCP连接,而一个套接字标识了一 ...

  3. UNIX网络编程笔记(4):简单的回射程序

    上一讲中我们通过调用fork函数实现了一个简单的并发时间获取服务器.这是一个简单的并发服务器框架,然而这里使用这个框架实现一个简单的回射服务器会出现一个问题,这个问题就是僵尸子进程. 1.回射程序 下 ...

  4. UNIX网络编程笔记(7):回射程序的UDP版本

    1.UDP简介 UDP是一个简单的传输层协议,应用进程往一个UDP套接字写入数据,随后被封装到一个UDP数据报,进而又被封装到一个IP数据报,然后发送到目的地.UDP不保证UDP数据报会最终到达目的地 ...

  5. UNIX网络编程笔记(6):I/O复用之select函数

    上一讲中我们正确处理了僵尸子进程,使得这个简单的服务器更加健壮.不幸的是,这个程序仍然有问题.想象一下,如果一个客户正在和一个服务器子进程连接建立完毕正在通话,而服务器子进程意外终止(比如kill), ...

  6. UNIX网络编程笔记(1):TCP简介

    1.简介 TCP(Transmission Control Protocol),即传输控制协议,是一种面向连接的.可靠的.基于字节流的传输层通信协议.TCP协议有以下几个特点: TCP提供客户与服务器 ...

  7. 《UNIX网络编程 卷1:套接字联网API》学习笔记——基本TCP套接字编程

    UNIX网络编程--基本TCP套接字编程 socket 函数 connect 函数 bind 函数 listen 函数 accept 函数 fork 和 exec 函数 并发服务器 close 函数 ...

  8. UNIX网络编程学习笔记(代码超详细解析)(持续更新)

    1. 其他函数准备 1. TCP 回射服务器程序: str_echo 函数 #include "unp.h"void str_echo(int sockfd) {ssize_t n ...

  9. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

最新文章

  1. Google和网易有道合作开课了
  2. Centos7下安装apache2.4 php5.6 pdo_oci oci8
  3. linux下arp***的解决方案[转]
  4. springaop事务逻辑原理_架构师:一篇文章掌握——Spring 事务管理
  5. 通过一个简单的例子学习Angular Injection Token工作原理
  6. 【专栏必读】(计算机组成原理题目题型总结)计理期末考试408统考算机组成原必考题型总结
  7. VNC Viewer连接成功后闪退的解决办法
  8. 计算机硬件配置及安装,电脑硬件及电脑配置知识大全
  9. 《那些年啊,那些事——一个程序员的奋斗史》二
  10. php 后天的时间戳,Linux中时间戳转换命令
  11. 基于微信小程序的智慧党史系统源码【包调试】
  12. 计算机应用技术python_大学计算机应用技术02PythonB2020学习通app网课答案
  13. dribbble加速vpn_关于Dribbble设计的几点思考
  14. 华清远见嵌入式c语言学习笔记
  15. Unity Shader 之遮挡透明
  16. 2029. 石子游戏 IX(C++解法与思路)
  17. 图集谷-写真集-爬虫-2.0
  18. PyDev开发环境搭建
  19. 战地3点加入服务器无响应,战地3服务器设置
  20. NXP i.MX 8M Plus工业开发板硬件说明书( 四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)

热门文章

  1. 学习游戏模型3d角色,出来好找工作吗?
  2. 【opencv】(12) 光流估计,行人轨迹跟踪,附python完整代码
  3. 诗经与当代流行歌曲相通之处—重章叠句
  4. jQuery基本介绍
  5. Golang(1)-简介及特性
  6. Docker Swarm 快速入门
  7. 学生成绩查询系统(Java实现),你第一个Java小项目
  8. 如何对查询好的快递单号物流进行删除的几种方法
  9. svn用户名和密码都正确,但是登录不了
  10. 独立站聊天机器人定制,10个神奇的聊天机器人模板帮您解决咨询难题