【Linux】进程相关笔记

文章目录

    • 查看进程方式
    • 批量化注释
    • fork
    • 进程状态
      • R状态
      • S状态
      • D状态
      • T状态
      • t状态
      • 退出码问题
      • X&&Z状态
          • 僵尸进程的危害
      • makefile 新知识
      • 孤儿进程

查看进程方式

ls /proc
ls /proc/13045 (可以查看到之情进程的属性)
ps axj | head -1 && ps ajx | grep myprocess(文件名) | grep -v grep(grep也是属于进程,这里是将他去除只看文件myprocess的进程)

查看pid的命令 getpid() 当系统在运行那个文件时,pid就输出哪个文件的pid
要包的头文件在下面的图片当中
getppid()是父进程,在运行当中的普通文件大多数的父进程都是bash(命令行解释器)
在这里插入图片描述

批量化注释

命令模式ctrl +v+j +I+//+esc
取消批量化注释
命令模式ctrl+v +l(L并不是i) +j(用来调整)+d

fork

bash命令行解释器,本质也是一个进程
命令行启动的所有的程序,最终都会变成进程,而该进程对应的父进程都是bash
如何创建的子进程?
fork之后,执行流会变成2个执行流
fork之后,谁先运行是由调度器决定的
fork之后,的代码共享,通常我们通过if和else if进行执行流分流

fork是创建了子进程,一个新的pcb并且他和它的父进程的代码和数据是一样的
进程在运行时是具有独立性的,父子进程也是一样的,
在这里插入图片描述
上面图片当中的写时拷贝(简单理解就是,只有在用拷贝时才会调用拷贝,不调用,还是之前的样子)

在这里插入图片描述
两个返回值的问题就是,return就是相当于printf在函数当中,属于代码行,公共的代码,谁都会往下运行,所以也就是出现了两个返回值。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

进程状态

阻塞状态:简单理解就是,进程等待某种资源就绪。
举例子:你去银行存钱,银行前台就属于cpu而你就是进程,而填写单子,带上钱,存折,等一系列动作
是属于等待的资源就绪,当前台让你去填写单子的时候,就是把该进程的pcb(task_struct)移到了单子的等待队列。在阻塞状态中,pcb被维护在不同的队列当中。(现在只是简单理解,与实际还是有差距的)

在这里插入图片描述
挂起状态:是一种特殊的阻塞状态,也可以称为阻塞挂起。
在进程阻塞时,在占用太多内存时,就会将阻塞的进程的代码和数据放到磁盘当中,把pcb放的内存当中,等待某种资源的队列当中,当资源就绪时,再将该进程的代码和数据进行召回。

R状态

while(1)
{
	printf("我是否在运行?");
	return 0;
}

上面的这段代码对应的是下面的图片的信息,由于printf一直是被调用,一直循环所以大部分时间都是在显示器的队列等待中。只有那很短的时间是在cpu中运行该进程。所以它的状态并不是S+
在这里插入图片描述

while(1)
{
	return 0;
}

上面的代码是对应下面的代码,上面的代码并不需要任何的等待,直接与cpu进行交互,所以是属于S+状态
在这里插入图片描述
在这里插入图片描述

S状态

while(1)
{
	int a=0;
	scanf("%d",&a);
	printf("%d",a);
	return 0;
}

上面的代码就是属于S状态,也可以称为阻塞状态,他在准备键盘输入就绪在该队列当中等待。
S是休眠状态,可终止(ctrl+c)
在这里插入图片描述

D状态

D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的
进程通常会等待IO的结束。
当进程出现D状态也就是说明,快宕机了,磁盘没有空间压力太大了,但是并不能说明内存也没有空间了。

T状态

T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可
以通过发送 SIGCONT 信号让进程继续运行。
在这里插入图片描述
在这里插入图片描述
kill -19 (pid)是将正在运行的进程进行停止,让后观察状态时T,kill -18 (pid)是将进程继续运行,但是这里发现ctrl+c并不能终止进程运行,这里就是加号的问题(+),带加号是在前台运行,可以使用ctrl+c进行终止,不带加号就是在后再运行需要使用kill -9 (pid)进行终止。

t状态

t(tracing stop)追踪停止,在代码运行到断点的时候进程状态就属于t

退出码问题

另一种查看返回值是否正确的方式。
echo $?
在这里插入图片描述

X&&Z状态

僵尸状态也就是为了让父进程拿到子进程的返回值,而保持的状态。
僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用,后面讲)
没有读取到子进程退出的返回代码时就会产生僵死(尸)进程
僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态

僵尸进程的危害

进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎
么样了。可父进程如果一直不读取,那子进程就一直处于Z状态?是的!
维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话
说,Z状态一直不退出,PCB一直都要维护?是的!
那一个父进程创建了很多子进程,就是不回收,是不是就会造成内存资源的浪费?是的!因为数据结构
对象本身就要占用内存,想想C中定义一个结构体变量(对象),是要在内存的某个位置进行开辟空
间!
内存泄漏?是的

在这里插入图片描述

X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态,只是一瞬间的状态

在这里插入图片描述
在这里插入图片描述
从上面图片中可以看到子进程返回之后,保持的状态就是Z+(僵尸状态)
这段代码是有问题,只是为了看到僵尸进程,代码并没有等待。

makefile 新知识

在这里插入图片描述
$@代表的是目标文件冒号左侧, $^代表的依赖列表冒号右侧文件,这样再写依赖列表的时候会非常的方便

孤儿进程

当父进程退出时,子进程会被OS自动领养(通过让一号进程,成为自己的新父进程),被领养的进程–孤儿进程
孤儿进程为什么会被收养?是因为,当子进程再后续退出时,无人回收,导致内存泄漏。
孤儿进程被OS领养之后,从前台进程,变为了后台进程,也就导致了,不能用ctrl+c进行终止

终止后台进程的方法有两种
1、kill -9 (加上需要杀掉的pid)
2、killall (加上进程文件的名字)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

垃圾回收之CMS、G1、ZGC对比

ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括: 停顿时间不超过10ms;停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆&#x…

【C++】string类的模拟实现

目录 一、前言 二、模拟实现 1、构造函数 2、拷贝构造函数 3、operator 4、operator[] 5、迭代器 6、string类的比较 7、string类的扩容 7.1、reserve 7.2、resize 8、string类的尾插 8.1、push_back 与 append 8.2、operator 9、string类的insert 9.1、插入字符…

deepin15.11无法正常输入汉字问题的解决

1,起因 本来是sougou输入法 但是由于自己突发奇想 在那瞎折腾 一不小心把配置给弄坏了 就再也回不到之前可以正常打印汉字的状态 历经两个小时的折腾 总算是又能输入汉字啦 耗费两个多小时 对当下的我来说时间成本着实有点高 但是把问题给解决了 总算还是有点收获 平时的学习过…

注意力机制 | CNN-BiLSTM-Attention基于卷积-双向长短期记忆网络结合注意力机制多输入单输出回归预测(Matlab程序)

注意力机制 | CNN-BiLSTM-Attention基于卷积-双向长短期记忆网络结合注意力机制多输入单输出回归预测(Matlab程序) 目录 注意力机制 | CNN-BiLSTM-Attention基于卷积-双向长短期记忆网络结合注意力机制多输入单输出回归预测(Matlab程序)预测结果评价指标基本介绍程序设计参…

qt 编译器 调试器

电脑版本:win10 64位 qt版本:based on Qt 5.14.0(msvc 2017, 32位) Qt Creator 4.11.0 qt安装包:qt-opensource-windows-x86-5.9.9.exe 安装过程一路next,安装完成后,默认使用的…

Spring IoC循环依赖问题

什么是循环依赖 循环依赖其实就是循环引⽤,也就是两个或者两个以上的 Bean 互相持有对⽅,最终形成闭环。⽐如A依赖于B,B依赖于C,C⼜依赖于A。 注意,这⾥不是函数的循环调⽤,是对象的相互依赖关系。循环调…

一个服务端同学的Vue框架入门及实践

做为服务端同学,接触前端代码较少,刚毕业的时候用过 jQuery Bootstrap2/3,当时的感觉就是,容易上手,学习门槛相对较低,另外就是有一个非常成熟的 jQuery 插件库,在这里,几乎可以找到…

vue集成tui.calendar日历组件

vue集成tui.calendar日历组件前言一、简介、效果图二、vue简单集成(集成js版本,没有使用官方的vue2版本)1.引包2.简单示例三、自定义功能1.需求分析、效果展示2.实现思路前言 vue2的集成在git上官方已经给出了demo这里就不贴代码了。本次主要是vue3集成 最近有个功能需要一个日…

重发布实验

基础配置: [r1]int l0 [r1-LoopBack0]ip add 1.1.1.1 24 [r1-LoopBack0]int g0/0/0 [r1-GigabitEthernet0/0/0]ip ad 192.168.12.1 24 [r1-GigabitEthernet0/0/0]int g0/0/1 [r1-GigabitEthernet0/0/1]ip add 192.168.123.1 24 [r1]ospf 1 router-id 1.1.1.1 [r1-o…

自学大数据第12天~Hbase

先留个问题~ERROR: KeeperErrorCode ConnectionLoss for /hbase/master 稍后解决 找到了问题的根因: 查看报错日志 事关tmp文件夹的配置,所以去找一下hbase配置文件中关于这个文件夹的配置项 我的策略是将这个配置项注销掉 然后启动hbase ,之后hmaster就成功启动了; 接着s…

熟练Redis之无处不在的锁

为了保证并发访问的正确性,Redis提供了两种方法,分别是加锁和原子操作 Redis加锁两个问题:一个是,如果加锁操作多,会降低系统的并发访问性能;第二个是,Redis客户端要加锁时,需要用到分布式锁,而分布式锁实…

Coremail奇安信发布2022中国企业邮箱安全性研究:应对ChatGPT带来的安全挑战

日前,广东盈世科技计算机有限公司与奇安信集团联合编写发布《2022中国企业邮箱安全性研究报告》。 报告数据显示:2022年,全国企业邮箱用户共收到各类钓鱼邮件约425.9亿封,相比2021年收到各类钓鱼邮件的342.2亿封增加了24.5%。 一…

华为OD机试用java实现 -【RSA 加密算法】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:RSA 加密算法 题目 RSA 加密…

【愚人节专场】Java实现定时发送小情话

首先,感谢大佬的帮助~附上大佬的博客以示尊敬https://blog.csdn.net/qq_38591577/article/details/128164308?spm1001.2014.3001.5502 功能实现: 在名为愚人节,实为告白/情人节的日子里,怎么样才能引起TA的关注呢?不…

49天精通Java,第21天,Java内部类,看看文心一言、ChatGPT怎么说

目录文心一言谈Java内部类ChatGPT谈Java内部类下面来聊聊哪吒的见解。一、为什么需要内部类?二、内部类分为四种三、成员内部类1、什么是成员内部类2、代码实例3、成员内部类进阶代码实例4、控制台显示5、外部类访问内部类四、局部内部类五、匿名内部类1、匿名内部类…

Dragonfly 最新正式版本 v2.0.9 已经发布!

作者:戚文博-蚂蚁集团 Dragonfly 最新正式版本 v2.0.9 已经发布!感谢 Dragonfly 的贡献者们,同时也感谢默默支持 Dragonfly 项目的各个公有云团队。欢迎访问 d7y.io [ 1] 网站来了解详情,下面具体介绍 v2.0.9 版本带来了那些更新。…

【Redis】十大数据类型(下篇)

文章目录redis位图(bitmap) --- 底子还是string基本命令图示setbit key offset value setbit 键 偏移位 只能零或者1getbit key offset 查看获取字符串长度 strlen统计key中包含1的个数 bitcount keybitop 统计两个比特key是否都为1技术落地:打卡签到,频…

【C语言蓝桥杯每日一题】——等差数列

【C语言蓝桥杯每日一题】——等差数列😎前言🙌等差数列🙌解题思路分析:😍解题源代码分享:😍总结撒花💞😎博客昵称:博客小梦 😊最喜欢的座右铭&…

让ChatGPT帮我写shell脚本, 结局很感人

七问ChatGPT, 剑指shell脚本编写 step1: 初问step2: 再问step3: 三问step4: 四问step5: 五问step6: 问个derstep7: 解决问题step8: 小问一下关于ChatGPT思考昨天浏览一篇关于脚本的技术文章的时候, 偶然看见一篇文章中写道关于mysql备份的脚本. 但是这个脚本时基于本地的MySQL服…

Idea+maven+spring-cloud项目搭建系列--13 整合MyBatis-Plus多数据源dynamic-datasource

前言:对于同一个系统,不同的租户需要自己独立分隔的数据库(每个数据库的表结构可以是相同的),同时也要支持跨数据源的查询;并且支持分布式事务,如果这里不使用分库分表插件,需要怎样…