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进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)的全部内容,希望能对大家有所帮助!

相关文章
|
1天前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
17天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
58 8
|
14天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
26天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
66 4
|
6月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
130 13
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
5月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
182 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
4月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。
|
5月前
|
存储 缓存 安全
【Linux】冯诺依曼体系结构与操作系统及其进程
【Linux】冯诺依曼体系结构与操作系统及其进程
173 1
|
5月前
|
小程序 Linux
【编程小实验】利用Linux fork()与文件I/O:父进程与子进程协同实现高效cp命令(前半文件与后半文件并行复制)
这个小程序是在文件IO的基础上去结合父子进程的一个使用,利用父子进程相互独立的特点实现对数据不同的操作
114 2