Linux提高:多进程压力测试

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux提高:多进程压力测试相关的知识,希望对你有一定的参考价值。

题目

创建一个多进程的程序,由用户输入进程个数和每个进程的运行圈数。

代码

在这里插入图片描述

/*************************************************************************
    > File Name: main.c
    > Author: 杨永利
    > Mail: 1795018360@qq.com 
    > Created Time: 2021年07月14日 星期三 21时22分03秒
 ************************************************************************/

#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
	int iProcessNum = 0;
	int iProcessLoop = 0;
	pid_t pid;
	int i = 0, j = 0;
	printf("请输入线程个数:\\n");
	scanf("%d", &iProcessNum);
	printf("请输入每个线程运行圈数:\\n");
	scanf("%d", &iProcessLoop);
	// 循环创建多个进程
	for (i = 0; i < iProcessNum; i++) {
		pid = fork();

		if (pid > 0) {
			break;
		}
		else if (pid == 0) {
			for (j = 0; j < iProcessLoop; j++) {
				printf("第 %d 个进程运行 %d 圈!!!\\n", i + 1, j + 1);
			}
		}
		else {
			perror("fork error");
			exit(1);
		}
	}
	wait(NULL);
	return 0;
}

知识回顾

进程

《计算机操作系统》这门课对进程有这样的描述:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。

程序是指令、数据及其组织形式的描述,进程是程序的实体

Fork

Fork 返回值:

正确理解一次 fork(),两次返回。

  • 当 fork()的返回值大于 0 时,是父进程,返回值为子进程的进程 ID;
  • 当 fork()返回值等于 0 时,是子进程;
  • 当 fork()的返回值小于 0 时,fork()出错,使用 perror()函数,输出出错原因。

Fork 所做工作:

fork 函数复制当前进程,在内核进程表中创建一个新的进程表项。
新的进程表项有很多属性和原进程相同:比如堆指针,栈指针,和标志寄存器的
值。新的进程表项属性与原进程不同:该进程的 PPID 被设置成原进程的 PID,
信号位图被清除(原进程设置的信号处理函数对现进程无效)
创建子进程后,父进程中打开的文件描述符默认在子进程中也是打开的,且文件
描述符的引用计数加 1。

进程状态切换

进程基本的状态有 5 种。分别为初始态,就绪态,运行态,挂起态与终止态

其中初始态为进程准备阶段,常与就绪态结合来看。

在这里插入图片描述

以上是关于Linux提高:多进程压力测试的主要内容,如果未能解决你的问题,请参考以下文章

Linux提高:多线程压力测试

Linux提高:多线程压力测试

Linux Linux程序练习十四(多进程压力测试)

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

转——浅谈如何提高服务器并发处理能力

四:(之八_Linux压力测试工具stress)Dockerfile语法梳理和实践