c++中的fork函数_C/C++网络编程7——多进程服务器端之fork函数

本文介绍了如何使用C++的fork函数创建多进程服务器端,以实现并发服务。当多个客户端请求时,多进程服务器能同时处理请求,避免顺序服务导致的延迟。文中还探讨了进程的概念,以及fork函数成功创建进程后的内存独立性。另外,文章提到了僵尸进程和孤儿进程的问题,指出应避免僵尸进程以防止资源耗尽。
摘要由CSDN通过智能技术生成

通过前面几节的内容,我们已经可以实现基本的C/S结构的程序了,但是当多个客户端同时向服务器端请求服务时,服务器端只能按顺序一个一个的服务,这种情况下,客户端的用户是无法忍受的。所以虚实现并发的服务器端。

并发服务器端的实现方法:

1:多进程服务器端:通过创建多个进程提供服务。

2:多路复用服务器:用过捆绑并统一管理I/O对象提供服务。

3:多线程服务器:通过生成与客户端等量的线程提供服务。

多进程服务器端:

进程:可执行程序的一次执行过程。

在linux下可通过fork()函数创建一个进程。

#include pid_t fork(void)

// 成功返回时父进程返回子进程的id,子进程返回0,失败时返回-1

通过fork()函数创建进程以后,父进程和子进程拥有完全独立的内存空间。举例:

#include #include

using namespacestd;

int g_count = 10;

intmain()

{

int l_count = 20;

g_count++;

l_count++;

pid_t pid =fork();

if (pid < 0) {

cout << "fork() failed" <

return 0;

}

if (pid == 0) {

g_count += 5;

l_count += 5;

} else{

g_count -= 5;

l_count -= 5;

}

if (pid == 0) {

cout << "child: " << g_count <

} else{

cout << "parent: " << g_count <

}

return 0;

}

僵尸进程及孤儿进程:

僵尸进程:子线程执行结束以后,系统资源不会被操作系统回收,需等父进程执行结束时回收,但父进程没执行结束,此时的子进程就成了僵尸进程。

孤儿进程:父进程已经执行结束,子进程还没执行结束,这时的子进程成为孤儿进程。孤儿进程执行结束以后系统资源有pid=1的进程回收。

僵尸进程的系统资源迟迟得不到回收会导致系统资源被耗尽,所以需要避免僵尸进程。孤儿进程不会造成资源不被回收,可不处理。

僵尸进程产生举例:

#include #include

using namespacestd;intmain()

{

pid_t pid=fork();if (pid < 0) {

cout<< "fork() failed" <

}if (pid == 0) {

cout<< "i am child proc:" << getpid() <

}else{

cout<< "i am parent proc:" << getpid() <

sleep(60);

}return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值