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

相关文章
|
29天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
66 1
|
1月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
1天前
|
编解码 自然语言处理 JavaScript
智谱发布GLM-OS概念及Agent产品,CogAgent-9B模型开源助力GUI交互场景
11月29日,智谱正式提出 GLM-OS 概念,并发布 AutoGLM 和 GLM-PC 两款 Agent 产品。近期GLM-PC 的基座模型—— CogAgent-9B 开源,供社区进一步开发。
|
1月前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
1月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
1月前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
1月前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
1月前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
56 4
|
1月前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
1月前
|
消息中间件 算法 调度
深入理解操作系统之进程管理
本文旨在通过深入浅出的方式,带领读者探索操作系统中的核心概念——进程管理。我们将从进程的定义和重要性出发,逐步解析进程状态、进程调度、以及进程同步与通信等关键知识点。文章将结合具体代码示例,帮助读者构建起对进程管理机制的全面认识,并在实践中加深理解。