Linux高级编程:进程(一)

1、进程

1.1什么是进程:进行中的程序(正在运行中的程序)-process过程

        程序的一次执行过程 - 进程

        hello.c --  程序源代码

        a.out   --  可执行程序

1.2程序和进程的关系:

        程序<------>进程

1.3进程怎么来的:

        程序->加载到内存(运行起来了)-->进程

1.4总结:

进程 ---动态---内存

程序---静态----硬盘

1个程序可以对应一个或多个进程

1.5为什么需要进程

时间片轮转

若要保存上次程序运行到哪了,则需记录-程序的执行状态

则需要进程这个概念了

描述和记录,正在运行中的程序的相关信息。

进程的调度(操作系统,上下文的切换)(让它看起来程序在并发运行,其实每个程序只能运行一小会,且(单核)cpu每次只执行一个程序)

进程的执行特点:微观串行,宏观并行。

最核心的目的:提高效率。

1.6进程的组成:

1、

程序 = 代码 + 数据

bss --- 未初始化的数据 |

data --- 初始化了的数据 | 静态区 | ---数据

text --- 正文段(代码段)

bss -- 未初始化                                                                栈

----                                                                                    堆

data -- 已初始化      --------------./a.out------------>              bss

----                                                                                    data                                           

text -- 代码段                                                                   text

//linux系统下,程序的内存布局                                        //进程的实体

静态区

字符串常量区

代码段  //c语言标准的内存布局

进程 -----

pcb---是一个结构体    Process Control Block

进程 = pcb块 + 各个段(栈 | 堆 | bss | data | text)

1.7进程的生命周期:

通用三态模型:

linux系统下的状态模型:

1.8观察进程的命令:

1、top命令  :观察进程  //类似任务管理器

2、ps

man ps /state

进程状态代码:

D    uninterruptible sleep (usually IO)
R    running or runnable   (on run queue) ---就绪队列中
S    interruptible sleep   (waiting for an event to complete)
T    stopped(暂停态), either by a job control signal or because it is being traced.
*W    paging (not valid since the 2.6.xx kernel)
*X    dead (should never be seen)Z    defunct ("zombie") process, terminated but not reaped(收尸) by its parent.

查看进程相关信息

1.就绪态、运行态 R

2.睡眠态、等待态

        可唤醒等待态 S

        不可唤醒等待态 D

3.停止态 T

4.僵尸态 Z

5.结束态

ps aux | grep 进程名 (pid号)  //当前进程的id号 及 状态

此命令可以察看所有同名文件

ps -eLf | grep 进程名 (pid号)   //可查看父进程id号

ppid(parent  process id)//父进程id

3、pstree

pstree -sp id号 //是两个命令合起来 {pid号(如果不写表示查看全部的)}

查看进程关系

init(1) (1号进程最早出现的一个进程)---- gnome-terminal(xxxx)----bash(xxxx)

4、kill

kill PID

kill 信号编号(-数字) 进程ID

发送信号+PID对应的进程,默认接收者关闭

kill -9 进程PID号 //杀死程序

kill -l //查看信号列表

killall 信号编号 程序名字

5、 fork()

        pid_t fork();      叉子
    一次调用,会返回两次。
    子进程先运行和是父进程先进程,顺序不确定。
    变量不共享。
    
    子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。
    
    功能:通过该函数可以从当前进程中克隆一个同名新进程。
          克隆的进程称为子进程,原有的进程称为 父进程。
          子进程是父进程的完全拷贝。
          子进程的执行过程是从fork函数之后执行。
          
          子进程与父进程具有相同的代码逻辑。

    返回值:int 类型的数字。
            在父进程中:成功 返回值是子进程的pid号 >0
                        失败 返回-1;
            在子进程中:成功 返回值 0
                        失败 无

代码示例:
int main()
{pid_t pid = fork();if(pid < 0){perror("fork fail");return -1;}if(pid >0 ){printf("father---\n");}else if (pid == 0 ){printf("child---\n");}
}

输出:

代码解释:

 父子进程独立操作。

练习:
1、父子进程都死循环。

        a.结束父进程,查看当前系统中父子进程的状态

        b.结束子进程,查看当前系统中父子进程的状态

#include<stdio.h>
#include<unistd.h>int main(int argc, const char *argv[]){pid_t pid = fork();if(pid < 0){perror("fork fail");return -1;}if(pid >0 ){while(1){printf("father---\n");}                                                                                    }else if (pid == 0 ){while(1){printf("child---\n");}}return 0;}                                                                  

 a.结束父进程    //子进程成为后台进程,孤儿进程 --- 子进程还在,父进程不在。(init收养子进程。以前的版本)

b.结束子进程   //子进程结束,父进程还在 父进程没有去收尸 ---子进程呈僵尸态,若此时结束父进程,则子进程的实尸体被系统收养,但系统发现子进程已死则直接销毁回收,不然僵尸态(户口信息)会占用内存。

 2、

自己分别定义一个 static的变量 static int a = 0; 全局变量 int b = 1; 堆区 int *p = (int *)malloc(sizeof(int)); *p = 2; (做修改)父进程中 做加1的操作 ,子进程中做加2的操作 分别打印,查看效果! 同时可以查看一下父子进程的关系(pstree) 父子进程的状态!

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>int b = 1;int main(int argc, const char *argv[])
{static int a = 0;int *p = (int *)malloc(sizeof(int));*p = 2;pid_t pid = fork();if(pid < 0){perror("fork fail");return -1;}//父进程独立代码while(1){if(pid > 0){printf("father a = %d\n",a++);printf("father b = %d\n",b++);printf("father p = %d\n",(*p)++);}//子进程独立代码else if(pid == 0){printf("child a = %d\n",a++);printf("child b = %d\n",b++);printf("child p = %d\n",(*p)++);}sleep(1);}return 0;
}

   父子进程之间不会影响,谁先运行的顺序由操作系统决定,尽可能公平、高效

 

3、面试题:

一次fork生成几个进程? 

他们之间的关系是什么样的? //生成1个一共有两个

如果两次fork同时前后执行,会生成几个进程? //共有(4)个进程

他们之间的关系如何表示,

有多少个子进程,

有没有孙进程?有

4、fork()&&fork()|| fork() 总共有几个进程?

有5个进程

5、

fork();

fork();

fork();  一共有几个进程?  //  2^n个进程

 6、动态生成子进程,并打印输出各自进程的pid号
#include<stdio.h>
#include<unistd.h>int main(int argc, const char *argv[]){pid_t pid = fork();if(pid < 0){perror("fork fail");return -1;}if(pid >0 ){while(1){printf("father---%d\n",getpid());}                                                                                    }else if (pid == 0 ){while(1){printf("child---%d\n",getpid());}}return 0;}                                                                  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http 协议深入介绍

一&#xff0c;http 相关概念 &#xff08;一&#xff09;关键名词 1&#xff0c;互联网 是网络的网络&#xff0c;是所有类型网络的母集 2&#xff0c;因特网 世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上&#xff0c;大家把连接在因特网上的计算机都成…

码界深潜:全面解读软件工程的艺术与科学

&#x1f3e1; 基石构筑篇——软件工程基础理论及技能 &#x1f522; 编程语言选型与精修 于软件工程之浩瀚宇宙中&#xff0c;编程语言犹如各色画笔&#xff0c;每种语言的特性对应不同的创作领域。譬如Java倚仗跨平台兼容性和强大的面向对象机制&#xff0c;在企业级应用程序…

【大厂AI课学习笔记NO.59】(12)过拟合与欠拟合

拟合就是调整参数和模型&#xff0c;让结果无限接近真实值的过程。 我们先来了解个概念&#xff1a; 偏差-方差窘境&#xff08;bias-variance dilemma&#xff09;是机器学习中的一个重要概念&#xff0c;它涉及到模型选择时面临的权衡问题。 偏差&#xff08;Bias&#xf…

centos7单节点部署ceph(mon/mgr/osd/mgr/rgw)

使用ceph建议采用多节点多磁盘方式部署&#xff0c;本文章仅作为单节点部署参考&#xff0c;请勿用于生产环境 使用ceph建议采用多节点多磁盘方式部署&#xff0c;本文章仅作为单节点部署参考&#xff0c;请勿用于生产环境 使用ceph建议采用多节点多磁盘方式部署&#xff0c;…

使用 Grafana 使用JSON API 请求本地接口 报错 bad gateway(502)解决

一 . 问题&#xff1a; 在用docker部署Grafana 来实现仪表盘的展示&#xff0c;使用到比较多的就是使用JAON API插件调用本地部署的API&#xff0c;比如访问localhost下的 /test_data 接口&#xff0c;一般我们使用的是http://localhost:8080/test_data&#xff0c; 但是在访…

C++面试宝典第34题:整数反序

题目 给出一个不多于5位的整数, 进行反序处理。要求: 1、求出它是几位数。 2、分别输出每一位数字。仅数字间以空格间隔, 负号与数字之间不需要间隔。如果是负数,负号加在第一个数字之前, 与数字没有空格间隔。注意:最后一个数字后没有空格。 3、按逆序输出各位数字。逆序后…

Flutter混合栈管理方案对比

1.Google官方&#xff08;多引擎方案&#xff09; Google官方建议的方式是多引擎方案&#xff0c;即每次使用一个新的FlutterEngine来渲染Widget树&#xff0c;存在的主要问题是每个引擎都要有比较大的内存等资源消耗&#xff0c;虽然Flutter 2.0之后的FlutterEngineGroup通过在…

网络安全: Kali Linux 使用 nmap 扫描目标主机

目录 一、实验 1.环境 2. Kali Linux (2024.1) 使用 namp 扫描目标主机 3.Kali Linux (2024.1)远程登录 Windows Server 4.Kali Linux (2024.1) 使用crunch字典工具 5.Kali Linux (2024.1)使用hydra密码工具 6.Kali Linux (2022.3) 通过SSH端口获取 Ubuntu 密码 二、问题…

C++——模板详解

目录 模板 函数模板 显示实例化 类模板 模板特点 模板 模板&#xff0c;就是把一个本来只能对特定类型实现的代码&#xff0c;变成一个模板类型&#xff0c;这个模板类型能转换为任何内置类型&#xff0c;从而让程序员只需要实现一个模板&#xff0c;就能对不同的数据进行操…

FPGA-串口接收图像写入RAM并读出在TFT显示屏上显示

系统框图&#xff1a; 需要用到的模块有&#xff1a; 1&#xff0c;UART_RX(串口接收模块)&#xff1b; 2&#xff0c;串口接受的数据存放到RAM模块&#xff1b; 3&#xff0c;RAM IP核&#xff1b; 4&#xff0c;时钟IP核 &#xff08;TFT显示屏驱动时钟的产生&#xff09…

kafka同步副本集及关键参数

上篇文章讲了副本机制是什么&#xff0c;一文读懂kafka内部怎么运行的-CSDN博客 这里深挖下同步副本集及里面的关键参数。副本会去leader副本拉去数据追加到自己日志中。 我们知道kafka副本的作用是提高系统的高可用。当leader副本挂了时&#xff0c;会从候选副本集中选者一个当…

java-幂等性

幂等性 1.1幂等性定义&#xff1a; 在计算机领域中&#xff0c;幂等&#xff08;Idempotence&#xff09;是指任意一个操作的多次执行总是能获得相同的结果&#xff0c;不会对系统状态产生额外影响。在Java后端开发中&#xff0c;幂等性的实现通常通过确保方法或服务调用的结…

设计模式(十四)中介者模式

请直接看原文: 原文链接:设计模式&#xff08;十四&#xff09;中介者模式_设计模式之中介模式-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 写了很多篇设计模式的…

Ribbon实现Cloud负载均衡

安装Zookeeper要先安装JDK环境 解压 tar -zxvf /usr/local/develop/jdk-8u191-linux-x64.tar.gz -C /usr/local/develop 配置JAVA_HOME vim /etc/profile export JAVA_HOME/usr/local/develop/jdk1.8.0_191 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOM…

Windows Server 各版本搭建文件服务器实现共享文件(03~19)

一、Windows Server 2003 打开服务器&#xff0c;点击左下角开始➡管理工具➡管理您的服务器➡添加或删除角色 点击下一步等待测试 勾选自定义配置&#xff0c;点击下一步 选择文件服务器&#xff0c;点击下一步 勾选设置默认磁盘空间&#xff0c;数据自己更改&#xff0c;最…

【JavaEE】_Spring MVC 项目传参问题

目录 1. 传递单个参数 1.1 关于参数名的问题 2. 传递多个参数 2.1 关于参数顺序的问题 2.2 关于基本类型与包装类的问题 3. 使用对象传参 4. 后端参数重命名问题 4.1 关于RequestPara注解 1. 传递单个参数 现创建Spring MVC项目&#xff0c;.java文件内容如下&#xff…

Apache Flink连载(三十七):Flink基于Kubernetes部署(7)-Kubernetes 集群搭建-3

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录

AI-数学-高中-32-概率-样本空间与随机事件

原作者视频&#xff1a;【概率】【一数辞典】1样本空间与随机事件_哔哩哔哩_bilibili 1.随机试验&#xff1a; 2.样本点、样本空间、有限样本空间&#xff1a; 示例1 示例2 3.事件&#xff1a; 示例&#xff1a;

自己本地模拟内存数据库增删改查

目录 学习初衷准备代码实现结果感谢阅读 学习初衷 用于满足自己的测试要求&#xff0c;不连接数据库&#xff0c;也不在意数据丢失 准备 maven依赖 org.springframework.boot spring-boot-starter-test test 代码实现 内存数据库&#xff08;InMemoryDatabase&#xff0…

[AutoSar]BSW_Com08 CAN driver 模块介绍及参数配置说明 (二)

目录 关键词平台说明一、CanControllers二、CanTxProcessing三、CanFilterMask四、CanHardwareObjects五、CanGeneral 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器…