Linux:进程(一)

news2025/1/4 17:34:38

文章目录

  • 前言
  • 一、进程是什么
  • 二、描述进程--PCB
  • 三、查看进程
  • 四、通过系统调用获取进程标示符
  • 五、通过系统调用创建进程-fork初识
  • 六、进程状态
  • 七、进程状态查看
  • 八、僵尸进程(Z:zombie)
    • 1.是什么
    • 2.为什么
    • 3.怎么避免
  • 九、孤儿进程
  • 十、进程优先级
  • 十一、其他概念
  • 总结


前言

  前面我们学习了gdb的一些基础命令,今天来看看进程这个概念。


一、进程是什么

  进程 = 对应的代码和数据 + 进程对应的 PCB 结构体
  那么问题来了,PCB是什么?
  难道是高中生物?错辣!那是PCR
  PCB全称Process Control Block,即 进程管理块

二、描述进程–PCB

  进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  Linux操作系统下的PCB是: task_struct
  task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

三、查看进程

  进程的信息可以通过 /proc 系统文件夹查看

[wkj@VM-4-13-centos lesson8]$ ls /proc/1
ls: cannot read symbolic link /proc/1/cwd: Permission denied
ls: cannot read symbolic link /proc/1/root: Permission denied
ls: cannot read symbolic link /proc/1/exe: Permission denied
attr       cgroup      comm             cwd      fd       io        map_files  mountinfo   net        oom_adj        pagemap      projid_map  schedstat  smaps  statm    task     wchan
autogroup  clear_refs  coredump_filter  environ  fdinfo   limits    maps       mounts      ns         oom_score      patch_state  root        sessionid  stack  status   timers
auxv       cmdline     cpuset           exe      gid_map  loginuid  mem        mountstats  numa_maps  oom_score_adj  personality  sched       setgroups  stat   syscall  uid_map
[wkj@VM-4-13-centos lesson8]$ ls /proc
1      1199   14040  20     24     259    27737  294  414  6411  7     925        cmdline    execdomains  kallsyms    locks    pagetypeinfo  stat           uptime
10     12     147    203    24085  26     27884  36   47   646   7301  990        consoles   fb           kcore       mdstat   partitions    swaps          version
10753  1217   16     21     25     260    28     37   49   65    8     991        cpuinfo    filesystems  keys        meminfo  sched_debug   sys            vmallocinfo
10968  13     1621   22     25007  26695  28826  38   50   650   8234  993        crypto     fs           key-users   misc     schedstat     sysrq-trigger  vmstat
11     13814  18     22268  25089  27     28850  389  51   654   8236  acpi       devices    interrupts   kmsg        modules  scsi          sysvipc        xpmem
1162   1389   19     22269  251    27052  289    39   52   657   8349  buddyinfo  diskstats  iomem        kpagecount  mounts   self          timer_list     zoneinfo
1166   1390   19897  22270  257    271    29     4    557  658   8350  bus        dma        ioports      kpageflags  mtrr     slabinfo      timer_stats
1175   14     2      23     258    277    293    410  6    659   9     cgroups    driver     irq          loadavg     net      softirqs      tty

四、通过系统调用获取进程标示符

  1. 进程id :pid
  2. 父进程id : ppid
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
printf("pid: %d\n", getpid());
printf("ppid: %d\n", getppid());
return 0;
}

五、通过系统调用创建进程-fork初识

  1. fork有俩个返回值
  2. 父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
	int ret = fork();
	if(ret < 0){
	perror("fork");
	return 1;
}
else if(ret == 0){ //child
	printf("I am child : %d!, ret: %d\n", getpid(), ret);
}
else{ //father
	printf("I am father : %d!, ret: %d\n", getpid(), ret);
}
	sleep(1);
	return 0;
}

六、进程状态

static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};
  1. R运行状态(running) : 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
  2. S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠。
  3. D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
  4. T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
  5. X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
    在这里插入图片描述
      当服务器压力过大的时候,操作系统(OS)会通过一定的手段,杀掉一些进程,以求节省空间的作用。

七、进程状态查看

  ps aux / ps axj 命令

八、僵尸进程(Z:zombie)

1.是什么

  一个进程已经退出,但是还不允许被操作系统(OS)释放,处于一个被检测的状态,这个状态就是僵尸状态。

2.为什么

  维持该状态,为了让父进程和OS来进行回收。
  我是一个进程,如果我退出了,没有人来读我的数据,我就是僵尸!
在这里插入图片描述

3.怎么避免

  1. 让僵尸进程的父进程来回收,父进程每隔一段时间来查询子进程是否结束并回收,调用wait()或者waitpid(),通知内核释放僵尸进程 。
  2. 采用信号SIGCHLD通知处理,并在信号处理程序中调用wait函数 。
  3. 让僵尸进程变成孤儿进程,就是让他的父亲先死。
  4. 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收。

九、孤儿进程

  父进程退出,子进程还在,子进程就叫做孤儿进程。孤儿进程会被领养,被1号进程领养(init,系统本身),这样就可以进行回收。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
	pid_t id = fork();
	if(id < 0){
	perror("fork");
	return 1;
}
else if(id == 0){//child
	printf("I am child, pid : %d\n", getpid());
	sleep(10);
}else{//parent
	printf("I am parent, pid: %d\n", getpid());
	sleep(3);
	exit(0);
}
	return 0;
}

十、进程优先级

  1. cpu资源分配的先后顺序,就是指进程的优先权(priority)。
  2. 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
  3. 可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

十一、其他概念

  1. 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
  2. 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
  3. 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行
  4. 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

总结

以上就是今天要讲的内容啦

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

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

相关文章

内蒙古简易医院企业网设计与规划

目 录 摘 要 1 Abstract 2 第1章 绪论 5 1.1 背景及意义 5 1.2 国内外研究现状 6 1.2.1 国外研究现状 7 1.2.2 国内研究现状 7 1.3研究内容 8 第2章 医院企业网需求分析 9 2.1医院基本情况 9 2.1.1基本情况 9 2.1.2建筑楼群及信息点分布图 9 2.2需求需求 10 2.2.1管理需求 10 2…

Matlab下载安装详细教程

下载链接&#xff1a;https://pan.baidu.com/s/19JbPP2hWlZraVbLuNlHpcg 提取码&#xff1a;6666 下载网盘链接是公众号“电脑DIY圈”里的分享&#xff0c;不是博主自己的&#xff0c;另外此安装教程同样来自电脑DIY圈公众号&#xff0c;博主仅做整理&#xff0c;以便日后需要 …

图 知识点总结(王道)

图的定义 图G由顶点集V和边集E组成&#xff0c;记为G&#xff08;V,E&#xff09;&#xff0c;其中V&#xff08;G&#xff09;表示图G中顶点的有限非空集&#xff1b;E(G)表示图G中顶点之间的关系&#xff08;边&#xff09;集合。若V{v1&#xff0c;v2vn}&#xff0c;则用|V…

asp开发的人脸识别:人脸照片+身份证号+姓名,核验实人认证

今天接到一个客户需求&#xff0c;要求用asp开发人脸识别功能&#xff0c;主要用于网站上用户的实人核验&#xff0c;用户上传照片后&#xff0c;通过照片姓名身份证号码&#xff0c;核验是不是一个人&#xff0c;判断用户的真实性。asp写这个其实很简单&#xff0c;经过一个小…

黑*头条_第7章_kafka实战应用文章自动审核

黑*头条_第7章_kafka实战应用&文章自动审核 文章目录黑*头条_第7章_kafka实战应用&文章自动审核kafka实战应用&文章自动审核今日目标1 kafka封装1.1 功能需求1.2 定义1.2.1 约束定义1.3 实现设计1.4 开发实现1.4.1 配置文件1.4.2 KafkaMessage1.4.3 KafkaListener1…

SpringMVC ---- HttpMessageConverter

SpringMVC ---- HttpMessageConverter1. RequestBody2. RequestEntity3. ResponseBody4. SpringMVC处理json5. SpringMVC处理ajax6. RestController注解7. ResponseEntityHttpMessageConverter&#xff0c;报文信息转换器&#xff0c;将请求报文转换为 Java 对象&#xff0c;或…

[牛客top101]详解01,02,反转链表问题

文章目录前言1. 整体翻转链表1.1 题目描述1.2 题目详解2. 翻转链表的部分区间2.1 题目描述2.2 题目详解3. 完整代码展示前言 从本章开始,我们就开始刷题旅程啦,路上必定问题多多,但还是得练呐!所以,就现在,开始啦! 1. 整体翻转链表 1.1 题目描述 给定一个单链表的头结点pHea…

(续)SSM整合之springmvc笔记(拦截器)(P164-168)

目录 一 准备工作 1. 创建spring_mvc_extension com.atguigu 2 .导入依赖 3. 添加web模块 4 .web.xml 5 . springmvc.xml 6 index.html 7 控制层 8 success.html 9 .添加到tomcat ​10 测试 二 . 测试拦截器 1 . index.html 2 . FirstInterceptor …

Docker概念及安装

一、Docker概述 1 IT架构的演进&#xff1a; 裸金属 → 虚拟机 → 容器→ 函数化、代码化 云计算涌现出很多改变传统IT架构和运维方式的新技术&#xff0c;比如虚拟机、容器、微服务、Serverless&#xff08;无服务&#xff09;&#xff0c;无论这些技术应用在哪些场景&…

智慧能源解决方案-最新全套文件

智慧能源解决方案-最新全套文件一、建设背景存在的问题二、建设架构三、建设方案四、获取 - 智慧能源全套最新解决方案合集一、建设背景 我国工业能耗占全国总能耗比例近70%&#xff0c;许多经济大省工业能耗占比甚至显著高于70%&#xff0c;工业企业能耗增速也明显领先全国其…

Bash脚本debug攻略

初学Bash时, 我从未想过去debug Bash脚本, 也从未想过Bash脚本也能debug. 随着技术的增长, 写的脚本越来越复杂, 使用echo打印日志来调试脚本的方式也越来越捉襟见肘了. 直到某天 通读了一遍Bash Reference Manual, 才发现Bash脚本也是可以debug的. 下面就介绍三种debug Bash脚…

定时器之编码器模式

1.什么是编码器 编码器&#xff08;encoder&#xff09;是将信号或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号&#xff0c;前者称为码盘&#xff0c;后者称为码尺。 2.分类 按照读出方式编码器可以分为接触式和非接…

C++学习笔记(面向对象部分开始6500字复习总结)

函数重载 1.对象属性 对象方法 和 类属性 类方法 2.const函数read only&#xff0c;不会修改任何数据 3.class默认private&#xff0c;struct默认public 4.&#xff01;&#xff01;&#xff01;&#xff01;C编译器优化&#xff01;&#xff01;&#xff01;《个人理解》当…

单细胞分析:数据整合(九)

导读 本文将学习跨条件执行单细胞整合&#xff0c;以识别彼此相似的细胞。 1. 目标 跨条件对齐相同的细胞类型。2. 挑战 对齐相似细胞类型的细胞&#xff0c;这样就不会因为样本、条件、模式或批次之间的差异而在后续分析中进行聚类。 3. 推荐 建议先不整合分析&#xff0c;再决…

2020下半年软件设计师上午题错题总结

2020下半年 1、以下关于两个浮点数相加运算的叙述中&#xff0c;正确的是 &#xff08;3&#xff09; 。 A. 首先进行对阶&#xff0c;阶码大的向阶码小的对齐 B. 首先进行对阶&#xff0c;阶码小的向阶码大的对齐 C. 不需要对阶&#xff0c;直接将尾数相加 D. 不需要对阶…

[附源码]java毕业设计网上购物商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

33.nacos客户端读取多配置文件实例(springcloud)

1.配置文件的读取方式【重点】nacos 配置中心通过 namespace、dataId 和 group 来唯一确定一条配置。 Namespace&#xff1a;即命名空间。默认的命名空间为 public&#xff0c;我们可以在 Nacos 控制台中新建命名空间&#xff1b;dataId&#xff1a;即配置文件名称 Group &…

比 O(nlog(n)) 做得更好——创造合适的条件

我们可以比 O(nlog(n)) 更快地排序。 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 介绍 我将介绍一种我称之为 groupSort 的排序方法。我没有直接解决排序问题…

基于小波变换编码的纹理图像分割

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 我们使用11或13维特征向量表示图像中的每个像素。两个特征用于表示像素之间的空间关系&#xff1b;由图像尺寸规格化的x和y像素坐标。对于灰度图像&#xff0c;一个特征是低通表示&#…

Python编程从入门到实践 第十一章:测试代码 练习答案记录

Python编程从入门到实践 第十一章&#xff1a;测试代码 练习答案记录 练习题导航Python编程从入门到实践 第十一章&#xff1a;测试代码 练习答案记录11.1 测试函数11.1.1 单元测试和测试用例11.1.2 可通过的测试11.1.3 未通过的测试11.1.4 测试未通过时怎么办11.1.5 添加新测试…