Linux提高:多进程压力测试

简介: 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 种。分别为初始态,就绪态,运行态,挂起态与终止态。


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


68aca064fa1fbbf6bcc5c550dd3e2ee9_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg==,size_16,color_FFFFFF,t_70.png


68aca064fa1fbbf6bcc5c550dd3e2ee9_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg==,size_16,color_FFFFFF,t_70.png68aca064fa1fbbf6bcc5c550dd3e2ee9_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg==,size_16,color_FFFFFF,t_70.png

相关文章
|
3月前
|
Linux Shell
linux自动崩溃,模拟测试
该脚本创建一个 systemd 服务和定时器,在系统启动3分钟后触发崩溃。通过向 /proc/sysrq-trigger 写入 &quot;c&quot; 来实现内核崩溃,用于测试系统崩溃后的恢复机制。
83 3
|
6天前
|
SQL 安全 Linux
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
42 1
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
|
8天前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
98 1
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
|
29天前
|
安全 Linux 网络安全
Metasploit Pro 4.22.8-2025091701 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.8-2025091701 (Linux, Windows) - 专业渗透测试框架
199 2
Metasploit Pro 4.22.8-2025091701 (Linux, Windows) - 专业渗透测试框架
|
29天前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
297 1
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
|
1月前
|
安全 Linux 网络安全
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
462 0
|
2月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
158 18
|
1月前
|
存储 安全 Linux
Kali Linux 2025.3 发布 (Vagrant & Nexmon) - 领先的渗透测试发行版
Kali Linux 2025.3 发布 (Vagrant & Nexmon) - 领先的渗透测试发行版
349 0
|
安全 Linux 测试技术
OpenText Static Application Security Testing (Fortify) 25.3 (macOS, Linux, Windows) - 静态应用安全测试
OpenText Static Application Security Testing (Fortify) 25.3 (macOS, Linux, Windows) - 静态应用安全测试
136 0
|
1月前
|
缓存 安全 Linux
Metasploit Pro 4.22.8-2025082101 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.8-2025082101 (Linux, Windows) - 专业渗透测试框架
126 0