当前位置:   article > 正文

linux系统fork函数返回值,Linux网络编程入门

fork返回值

1.进程

并发服务端:最简单的实现方式,用fork函数为每个客户端创建个子进程。

在介绍前,先回顾下进程的概念。

(1)在操作系统中,进程是程序的一次执行,且是拥有资源的最小单位和调度单位(在引入线程的操作系统中,线程是最小的调度单位)。一个进程,包括代码、数据和分配给进程的资源。

(2)在Linux系统中创建进程有两种方式:一是由操作系统创建,二是由父进程创建进程。

2.fork

fork函数的Linux头文件以及函数定义如下:

#include

pid_t fork(void)

(1)当一个进程(该进程相当于父进程 )调用fork函数后,系统先给新的进程(子进程)分配资源,例如存储数据和代码的空间,然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆 了一个自己。

简而言之,父进程就像父亲,子进程就像儿子,父进程克隆产生子进程,因此父进程和子进程代码、指令、变量等都相同。

(2)通过fork返回的值来判断当前进程是子进程还是父进程。fork函数返回两次 ,即在父进程中fork返回值是子进程的ID号,在子进程中fork返回值是0。如果出错,返回-1。

在父进程中,fork返回新创建子进程的进程ID;

在子进程中,fork返回0

如果出现错误,fork返回一个负值-1

(3)每个进程都有一个独特(互不相同)的进程标识符(process ID),可以通过getpid函数获得当前进程的ID,同时也可以通过getppid函数获得父进程的ID。

写个程序理解fork函数,如下:

#include

#include

int main()

{

pid_t pid = fork();

if (pid == -1) {

printf("fork error\n");

} else if (pid == 0) {

printf("我是子进程, 我的进程ID是 %d\n",getpid());

printf("我的父进程ID是 %d\n",getppid());

} else {

printf("我是父进程, 我的进程ID是%d\n",getpid());

}

sleep(1);

return 0;

}

第6行fork执行完毕后,出现两个进程,如下图所示,fork是把进程当前的情况拷贝一份,因此父进程和子进程有共同的代码、指令以及变量。但这两个进程的变量都是独立的,存在不同的内存地址中。根据判断条件(fork的返回值),从而可以执行相应代码。

d5a3a47cec2d401e2e6a9948be0d4ead.png

第16行执行sleep函数,挂起一段时间,保证父/子进程执行完毕。

执行完毕,结果如下图所示。

1ad0108f0038804d6dd3749b808cf904.png

在右侧建立个名为fork的c文件,试编写个程序:测试个fork函数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/210673
推荐阅读
相关标签
  

闽ICP备14008679号