我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux创建进程达到65535的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux创建进程达到65535的方法

linux上创建进程据说消耗很少,这个一直是Linux的特点,于是就专门测试Linux创建进程的极限,测试代码如下:


//fork.c
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXPROCESS 65535
#define SLEEPTIME 60
int main(int argc, char **argv) {
  pid_t pid;
  int count = 0;
  int maxprocess = MAXPROCESS;
  if (argc == 2) {
    maxprocess = atoi(argv[1]); 
  }
  for (count = 0; count < maxprocess; count++) {
    pid = fork();
    if (pid < 0) {
      perror("fork error");
      exit(1);
    } else if (pid == 0) {
      printf(XOssoZmbd"child %d start\n", count);
      sleep(SLEEPTIME);
      printf("child %d end\n", count);
      exit(0);
    } 
    printf("parent:create %d child\n", count);
  }
  for (count = 0; count < MAXPROCESS; count++) {
    wait();
  }
  exit(0);
}

这段代码是不断创建子进程,默认是创建65535个进程,如果无法创建,就打印出错误。

测试代码是我新建的一个blue帐户进行运行测试,为了让进程尽可能创建多的进程,首先要设置blue帐户创建进程数的硬限制

使用root帐户修改/etc/security/limits.conf文件,加入一下行:

blue             hard    nproc          65535

然后为blue帐户设置创建进程的软限制,在终端执行如下代码:

ulimit -u 65535

到了这里,虽然我们设置blue帐户创建进程数的硬限制和软限制都是65535,但是我们还不能使用blue帐户创建65535个进程,我们在Linux还需要设置内核参数kernel.pid_max,这个参数我默认安装都是32768,所以即使使用root帐户,却不设置这个内核参数,整个系统最多可以创建的进程数就是32768,所以我们需要进行如下设置:

sysctl -w  kernel.pid_max=65535

备注:如果是使用root帐户执行程序,是不需要设置资源的硬限制和软限制,但是还是需要设置进程pid最大值的内核参数,才可以创建65535个进程。

接着在同一终端切换为blue帐户:

su blue

编译和执行测试代码:


gcc fork.c -o fork
./fork

我的虚拟机Linux内存是512M,在创建6千多个进程时,程序运行得很慢,通过vmstat命令观察,发现swap内存的置入置出很频繁,可以判断是由于内存不足,使用虚拟内存,导致频繁的IO操作,让测试代码变得很慢,所以创建过多进程时,系统的内存是重要衡量的一个方面。

后来我把测试代码放到一台配置比较好的至强服务器测试,内存是8G,在创建接近4W个进程时,程序的运行也到了瓶颈,依然是内XOssoZmbd存的瓶颈。

测试代码中,创建的子进程,占用的内存相当小,实际使用中,只可能比测试代码创建的进程使用更多的内存,所以相应的,同样配置的机器,能创建的可用进程应该是更少的。

总结

以上所述是小编给大家介绍的Linux创建进程达到65535的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux创建进程达到65535的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux创建进程达到65535的方法

linux上创建进程据说消耗很少,这个一直是Linux的特点,于是就专门测试Linux创建进程的极限,测试代码如下://fork.c #include #include #include
2022-06-04

Linux进程的介绍及创建方法

这篇文章主要介绍“Linux进程的介绍及创建方法”,在日常操作中,相信很多人在Linux进程的介绍及创建方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux进程的介绍及创建方法”的疑惑有所帮助!接下来
2023-06-06

linux中创建子进程的方式有哪些

在Linux中,有以下几种方式可以创建子进程:1. 使用fork()系统调用:fork()系统调用会创建一个与父进程完全相同的子进程。子进程从父进程继承了大部分资源,包括代码段、数据段、打开的文件描述符等。通过fork()系统调用,可以通过
2023-09-11

linux怎么查看进程创建的子进程

要查看Linux中进程创建的子进程,可以使用`ps`命令结合一些参数来实现。1. 使用`ps -ef`命令可以列出系统上所有进程的详细信息。这会包括进程ID(PID)和父进程ID(PPID)等。```bashps -ef```2. 通过将输
2023-09-12

linux线程的创建方法是什么

在Linux系统中,可以使用pthread库来创建线程。pthread库是一个POSIX线程库,提供了一系列函数来创建、管理和同步线程。使用pthread库创建线程的方法如下:1. 包含头文件:首先需要包含pthread.h头文件。```c
2023-08-30

Linux下创建进程的三种方式及特点

Linux下创建进程的方式有三种:1、fork()函数;2、vfork()函数;3、clone()函数;fork()函数是Linux最常见的创建进程的方式,特点是子进程是父进程的复制品,在调用fork()函数后,系统会为新进程分配资源,例如内存空间,然后复制父进程的全部资源到子进程中,因此新进程和父进程几乎完全一样。
Linux下创建进程的三种方式及特点
2023-10-29

linux创建文件的方法

小编给大家分享一下linux创建文件的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!linux创建文件的方法:1、使用touch方法,代码为【touch yy
2023-06-06

linux创建进程的命令有哪些

这篇“linux创建进程的命令有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux创建进程的命令有哪些”文章吧。
2023-03-13

linux创建锁文件的方法

本篇内容介绍了“linux创建锁文件的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、概述 Linux提供了多种特性来实现文件锁定。其
2023-06-13

Linux之线程的创建方式

目录线程的概念与实现方式线程的实现方式linux系统实现多线程的方式线程和进程的区别多线程开发的三个基本概念线程库的使用线程库中的其他方法线程属性线程属性初始化线程分离总结线程的概念与实现方式 线程是进程内部的一条执行序列或执行路径,一个进
2023-03-23

python进程池创建队列的方法是什么

在Python中,可以使用multiprocessing模块来创建进程池和队列。以下是使用multiprocessing.Pool和multiprocessing.Queue来创建进程池和队列的示例代码:import multiproc
python进程池创建队列的方法是什么
2024-02-29

Java线程的创建方法

这篇文章主要讲解了“Java线程的创建方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程的创建方法”吧!多线程指的是一个程序运行时,会包含多个线程同时进行。Java创建线程有三种
2023-06-02

linux 创建守护进程的相关知识

创建子进程,父进程退出   这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象。之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式
2022-06-04

创建Linux系统服务的方法

linux环境:ubuntu#! /bin/sh# Provides: server.sh# Default-Start: 2 3 4 5# Short-Description: server testing...EXEC_P
2022-06-04

编程热搜

目录