Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)(下)

简介: Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)

五.进程PID

1.getpid()和getppid()

注意:pid_t的值都是正整数或0

下面我们来在代码当中查看一下process的进程ID和其父进程ID

while :; do ps ajx | head -1 && ps ajx | grep 可执行程序名字 | grep -v grep; sleep 1;done

这个shell命令可以死循环查看含有指定可执行程序名字的进程

每次while循环都会休眠1秒

按ctrl+c退出

根据进程ID查看对应进程的信息:

ps ajx | head -1 && ps ajx | grep 进程ID | grep -v grep

下面我们多次执行这个进程,发现:

2.fork()函数创建进程

1.fork()函数

2.演示

下面我们来演示一下

3.几点说明

1.进程的独立性

(任意)进程之间是具有独立性的,互相之间不能影响

即使父进程和子进程亲如父子,但是当我们的子进程和父进程都运行起来之后,

子进程挂了,代码也仍会存在,对父进程无影响

父进程挂了,代码也仍会存在,对子进程无影响

杀死父进程,子进程依然运行

不过此时因为父进程被杀死了,所以子进程无法通过ctrl+c退出

只能使用kill -9杀死子进程

杀死子进程,父进程依然运行,

右上方的窗口显示了子进程处于defunct(也就是关闭)的状态

说明子进程被杀死了,按ctrl+c后父进程可以正常退出

关于父子进程的话题,我们以后在介绍僵尸进程和孤儿进程的时候会进行详细说明的

在这里我们只需要知道:进程之间是具有独立性的,互相之间不能影响

2.关于fork函数返回值的几个问题
1.为何给父子进程的返回值是不同的?

通过fork函数的返回值区分父子进程,利用if else判断来让父子进程做不同的事情

2.fork函数为何会返回2次?

在fork函数内部,在执行到return语句之前,子进程已经被创建好了

又因为父子进程的代码是共享的

而且return语句本身也属于代码

所以return语句既会被父进程执行,也会被子进程执行

3.为何id作为同一个变量既可以表示父进程id,又可以表示子进程id呢?

这就涉及到写时拷贝的知识点了,先在这里提一下,以后我们还会提到的:

因此,我们可以得出:

在Linux中,可以用同一个变量名来表示不同的内存

4.创建多个子进程(观察进程的创建和退出的全过程)

下面我们创建多个子进程

观察一下进程的创建和退出的全过程

最后所有的子进程都退出了,只剩下一个父进程最后休眠了15秒之后才退出

这样我们就能够看到进程从创建到退出的全过程了

这里的子进程处于defunct(也就是关闭)的状态就表示该进程已经退出了

六.另一种查看进程的方法

1./proc

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

ls /proc

查看具体某一个进程的信息:

ls /proc 进程id

下面我们用mycmd这个可执行程序来测试一下

我之前在Linux中的shell外壳与权限(包含目录文件的权限,粘滞位的来龙去脉)这篇博客中提到过链接文件

接下来我们还会见到链接文件

2.exe链接文件

不过这个进程就只能执行这一次了,当这个进程结束之后,就无法再执行了

当我把mycmd这个可执行程序删除之后,这个进程依旧再运行

但是这个exe执行的那个可执行程序已经显示deleted了

3.如何改变cwd呢?

我们可以使用chdir函数

下面我们来实验一下

当前是在这个路径下

我想让它到

/home/wzs/wzsdir/systemlearndir

这个路径下

下面我们来创建一个文件

加深一下对cwd和fopen函数的理解

发现test.txt的确被创建在了

/home/wzs/wzsdir/systemlearndir

这个路径下

七.总结

这篇博客我们主要介绍了

1.冯诺依曼体系结构

2.操作系统

3.进程的概念,task_struct结构体

4.进程基础的相关操作:查看进程,杀死进程,改变进程所在工作目录

5.进程PID,fork函数创建进程

以上就是Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)的全部内容,希望能对大家有所帮助!

相关文章
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
存储 Linux iOS开发
【Linux】冯诺依曼体系与操作系统理解
本文深入浅出地讲解了计算机体系的两大核心概念:冯诺依曼体系结构与操作系统。冯诺依曼体系作为现代计算机的基础架构,通过中央处理器、存储器和输入输出设备协同工作,解决了硬件性能瓶颈问题。操作系统则是连接硬件与用户的桥梁,管理软硬件资源,提供运行环境。文章还详细解析了操作系统的分类、意义及管理方式,并重点阐述了系统调用的作用,为学习Linux系统编程打下坚实基础。适合希望深入了解计算机原理和技术内幕的读者。
342 1
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
482 32
|
8月前
|
Ubuntu Unix Linux
操作系统的最强入门科普(Unix/Linux篇)
下期文章,小枣君会重点聊聊Windows和macOS那条线。敬请关注! 如果大家觉得文章不错,还请帮忙多多转发!谢谢!
|
8月前
|
Web App开发 缓存 Rust
|
缓存 运维 前端开发
阿里云操作系统控制台:高效解决性能瓶颈与抖动之进程热点追踪
遇到“进程性能瓶颈导致业务异常”等多项业务痛点时,提供高效解决方案,并展示案例。
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
498 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
609 10
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2738 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
下一篇
开通oss服务