利用fork循环创建进程

我们知道,fork可以创建子进程,那么如果循环调用fork,进程之间会有什么关系呢?

得到结果:

从结果上分析,一共有4个进程,6132,6133,6134,6135,它们的关系是怎样的呢?

按道理来讲,刚开始i=0,只有一个进程6132,fork后,产生子进程6133。6132执行完printf后,i++。在fork后,6132作为父进程,产生子进程6134.而6133作为i=0时的子进程,执行完printf后,i++,此时6133作为父进程,产生子进程6135。

结果却和所想有些出入,为什么后4个进程的父进程都是1?

我认为可能和内核进程调度算法有关,可能是因为父进程执行完,而子进程没有执行完,导致子进程成为孤儿进程,被1给回收。

之后我给父进程加上sleep(1);

这样就能够直观的显示进程之间的关系了。

时间: 2024-08-07 04:32:44

利用fork循环创建进程的相关文章

通过fork函数创建进程的跟踪,分析linux内核进程的创建

作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验过程 1.打开gdb,设置断点 2.跟踪到do_fork处 3.跟踪到copy_process断点处. 4.跟踪到ret_from_fork子进程创建完成. 二.代码部分分析 Fork的系统调用代码在linux/arch/i386/kernel/process.c中:       asmlinkage int sys_fork(s

Linux c进程管理—创建进程 system、execl、execlp、fork

Linux c 进程管理:   1.      创建进程:        system函数:         int system(const char*filename);                                                  建立独立进程,拥有独立的代码空间,内存空间                                                  等待新的进程执行完毕,system才返回.(阻塞)          system:

python进程--传参,for循环创建,join方法

OK上一篇我们简单学了一下    进程    的创建方式,那么这一篇,我们把其他一些边角料..不对,不是边角料..........也是很重要的一些小知识点 也是经常用的. 话不多说直接进入主题 传参: from    multiprocessing     import     Process     这一步大家还记得吧,对喽,不管进程写那些东西,我们第一步先写这个,导入Pocess 先来个函数的哈!   这是第一种,这一种里面有两种传参对象 def   f1(n):  print(n) if

fork同时创建多个子进程的方法

Fork同时创建多个子进程方法 第一种方法:验证通过 特点:同时创建多个子进程,每个子进程可以执行不同的任务,程序 可读性较好,便于分析,易扩展为多个子进程 int main(void) { printf("before fork(), pid = %d\n", getpid()); pid_t p1 = fork(); if( p1 == 0 ) { printf("in child 1, pid = %d\n", getpid()); return 0; //若

linux创建进程fork的方法步骤

fork创建进程 函数原型如下 #include// 必须引入头文件,使用fork函数的时候,必须包含这个头文件,否则,系统找不到fork函数 pid_t fork(void); //void代表没有任何形式参数 父进程与子进程 1.掌握概念,什么是父进程,什么是子进程 除了0号进程(系统创建的)之外,linux系统中都是由其他进程创建的.创建新进程的进程,即调用fork函数的进程为父进程,新建的进程为子进程. 2.fork函数不需要任何参数,对于返回值有三种情况 1)对于父进程,fork函数返

fork创建进程使用

1.fork创建进程的使用 fork()返回值等于0时,表示创建子进程: fork()返回值大于0时,是主进程: #include<stdio.h> #include<stdlib.h> #include<sys/wait.h> #include<signal.h> void sig_handler(int signo) { printf("child process %d stop\n", signo); //wait(0); } vo

利用fork实现并发服务器

(1) fork 浅析 linux 中, 一个进程可以通过fork()系统调用来创建一个与自己相同的子进程, 这个子进程是父进程的克隆, 他继承了父进程的整个地址空间, 包括进程上下文, 堆栈地址, 内存信息, 进程控制块等.值得注意的是, 调用fork一次, 他却返回两次, 一次是在父进程中返回子进程的进程id, 一次是在子进程中返回0, 这看起来有点难理解, 我们先看下面这段程序: #include <unistd.h> #include <stdio.h> #include

Linux上利用nmcli命令创建网络组

网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量 网络组不同于旧版中bonding技术,提供更好的性能和扩展性 网络组由内核驱动和teamd守护进程实现. 下面我们以CentOS7系统为环境,演示下如何在Linux系统上利用nmcli命令创建网络组 nmcli connection add con-name team0 type team ifname team0 config '{"runner":{"name":"activebackup&

创建进程的函数

clone().fork().vfork()都是Linux的系统调用. 进程一般由代码段.数据段和PCB进程控制块组成. fork 创造的子进程复制了父亲进程的资源,包括内存的内容task_struct内容,新旧进程使用同一代码段,复制数据段和堆栈段,这里的复制采用了注明的copy_on_write技术,即一旦子进程开始运行,则新旧进程的地址空间已经分开,两者运行独立. 优点是子进程的执行独立于父进程,具有良好的并发性. 缺点是两者的通信需要专门的通信机制,如pipe.fifo和system V