Linux 多进程

news/2025/2/14 6:17:48/

目录

0x01 linux中特殊的进程

0x02 进程的标识

0x03 创建子进程


0x01 linux中特殊的进程

  1. 0号进程:idle进程,系统启动加载的进程
  2. 1号进程:systemd进程,系统初始化,是所有进程的祖先进程 init
  3. 2号进程:kthreadd进程,负责内核中所有进程的调度和管理

0x02 进程的标识

  • 每个进程都会有一个非负整数来标识进程,pid
  • 查看进程的命令 ps -ef | grep yourprocessname

从左到右依次是:启动进程的用户 进程的id标识 父进程的id cpu占用率 开始时间 启动设备 运行总时间 启动时执行的命令

# 使用getpid(void)可以获取进程的id
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<unistd.h>int main(){printf("进程的id=%d",getpid());printf("进程的父进程id=%d",getppid());sleep(10);return 0;
}

0x03 创建子进程

  • 使用fork函数可以创建新的进程
  • 在子进程调用fork函数创建进程会返回0,在父进程中使用fork函数会返回进程的ID
  • 子进程是父进程的副本
  • 子进程获得了父进程的数据空间,堆和栈的副本,不是共享,子进程改变数据,不会影响父进程变量的数据
  • 如果父进程先退出,子进程会成为孤儿进程,1号进程会管理孤儿进程,对子进程的状态进行收集工作
  • 如果子进程先退出,内核会向父进程发送一个SIGCHLD的信号,如果父进程不处理这个信号,子进程会成为僵尸进程
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>#include<signal.h>void func(int sig){int state;wait(&state);
}
int main(){// 1忽略子进程的sigchld// signal(SIGCHLD,SIG_IGN);// 3使用函数处理信号signal(SIGCHLD,func);File* file=fpopen("/tmp/tmp.txt","w+");fprintf(file,"this is a test\nfflush(file);printf("进程的id=%d",getpid());sleep(10);printf("进程的id=%d",getpid());int pid=fork();printf("fork出的id为%d",pid);sleep(1);if(pid==0){printf("子进程的id为%d",getpid());printf("子进程的父进程id为%d",getppid//子进程的逻辑代码fprintf(fp,"子进程 this is a test\n");}if(pid>0){printf("父进程的id为%d",getpid());printf("父进程的父进程id为%d",getppid());//父进程的逻辑代码fprintf(fp," 父进程 this is a test\n");//2 等待子进程退出的代码 使用wait方式阻塞等待子进程退出// int state;// wait(&state);}printf("进程的id=%d",getpid());sleep(30);printf("进程的id=%d",getpid());fclose(file);
}


http://www.ppmy.cn/news/1039478.html

相关文章

pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

tep是一款测试工具&#xff0c;在pytest测试框架基础上集成了第三方包&#xff0c;提供项目脚手架&#xff0c;帮助以写Python代码方式&#xff0c;快速实现自动化项目落地。 在tep项目中&#xff0c;自动化测试用例都是放到tests目录下的&#xff0c;每个.py文件相互独立&…

Kotlin手写RxJava变换符

Kotlin手写RxJava变换符 本文链接&#xff0c;点击这里进入 1、核心点&#xff1a;中转站存储之前的数据 2、三行代码实现RxJava 使用create、map、observer fun main() {// create构造出RxJavaCore存放&#xff0c;lambda执行完的结果create{"WCH"}.map{ // 扩展…

Tenzing and Balls

题面翻译 有一个大小为 n n n 的数组 a a a。你可以进行下列操作任意多次&#xff1a; 选择 i i i 和 j j j&#xff0c;使 1 ≤ i < j ≤ ∣ a ∣ 1\leq i \lt j \leq |a| 1≤i<j≤∣a∣ 并且 a i a j a_ia_j ai​aj​&#xff0c; 从数组中删除 a i , a i 1 ,…

合宙Air724UG LuatOS-Air script lib API--wifiRil

wifiRil Table of Contents wifiRil wifiRil.regRsp(head, fnc, typ, formt) wifiRil.regUrc(prefix, handler) wifiRil.deRegUrc(prefix) wifiRil.request(cmd, arg, onrsp, delay, param) wifiRil 模块功能&#xff1a;esp8266 wifi模块AT命令交互管理 wifiRil.regRsp(head,…

龙迅LT9711 2PORT MIPI或者LVDS转TYPE-C

LT9711 1.描述&#xff1a; Lontium LT9711是双端口MIPI/LVDS到DP1.2转换器&#xff0c;内部有c型替代模式开关和PD控制器。MIPI DSI/CSI输入具有可配置的单端口或双端口&#xff0c;具有1个时钟通道&#xff0c;1个~4个数据通道&#xff0c;最大运行2Gbps/通道&#xff0c;可…

【Java开发实战攻关】「JPA技术专题」带你一同认识和使用JPA框架进行开发你的应用服务

带你一同认识和使用JPA框架进行开发你的应用服务 什么是JPA框架JPA持久层框架使用JPA实现持久化JPA注解介绍按类别划分的 JPA注解实体注解Entity模型注解Table示例-显示了如何使用此批注指定主表名。 注解TableGeneratorTableGenerator主要属性strategystrategy属性可以是下列枚…

【Linux】一切皆文件

Linux 下一切皆为文件&#xff0c; 文件包括头文件&#xff0c;库文件&#xff08;静态库和共享库&#xff09;&#xff0c;可执行文件&#xff0c;目录文件&#xff0c;软链接文件&#xff0c;配置文件等。 每个文件都依据权限分为用户、用户组和其他人三个身份&#xff0c;…

2023年4大收银系统软件排名(真实测评)

现在满大街的各种服装店、便利店、百货店、母婴店...... 每天都要处理大量的订单。 使用传统的人工开单记账&#xff0c;效率低下、客户体验差、而且容易出错&#xff0c;需要耗费很多时间来回对账&#xff1b; 聪明的零售店老板都已经开始使用收银系统软件&#xff0c;通过手…