栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Linux学习】- 进程管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Linux学习】- 进程管理

目录

一:了解进程

二:什么是程序,什么是进程

三:进程实例

四:操作系统如何管理进程

 五:第一次运行的进程-0号进程

六:进程的管理

七:进程状态

八:进程状态转换

九:Init进程 - 初始化进程

十:获取进程标识


一:了解进程

window下 ctrl + shift +esc调出任务管理器,可以看到进程

 可以看到VM虚拟机,QQ,VS2019在运行,可以看到当前的程序占用了多少的CPU,占用了百分之多少的内存,占用了百分之多少的磁盘,占用了百分之多少的网络,占用了百分之多少的GPU(也就是显卡,有的应用会占用显卡,有的应用不会),比如腾讯会议是有公屏的就会占用显卡,进程中,那些数字是一直跳动的。了解一下程序和进程。

二:什么是程序,什么是进程

程序只有在运行的时候,在进程的面板上才可以查看到。进程上没有看到程序,但是程序存在于电脑中。

程序是一种静态的概念,进程是一种动态的概念。

程序在安装成功后,就存储在磁盘(硬盘)中了。无论开机关机,只要没有卸载删除,这个程序都是存在的。----静态

进程不在磁盘,而是在内存中进行活动。----动态(任务管理器中看到的进程数据是不断跳动的,有时候用到某个应用程序的功能的时候就用的多,占用的内存就大了,应用程序打开但是没使用的时候占用的内存就没有那么大)(比作一个类,在使用的时候,类的空间就生成了)

进程是需要用户双击运行程序,就可以启动,才在内存当中占用一定的空间,不同的应用程序占用的内存空间也不是固定的。

进程是根据程序来生成的,程序在编写好运行后才会产生进程。我们现在编写的代码是个程序,因为我们编写完的代码是存放在磁盘中的某个文件夹下,只要不是卸载删除,无论开机关机,编写的程序代码一直是存在的。但是程序在编译链接后,点击了运行按钮,运行后在内存中占用一定的空间,就变成了进程。

计算机中不对程序进行管理,而是对进程进行管理。对比磁盘的空间和内存的空间,明显是磁盘的空间要比内存空间大的大的多。内存有4G的,最少的硬盘128G。系统在对进程进行管理,实际上也就是对内存进行管理。如果电脑有些年头,有点卡,又不想要换新的电脑,那内存条加大一点(同时容纳的进程的数量变多)就可以接着使用了。

程序(program)是存放在磁盘文件中的可执行文件。只要是程序,就一定需要有一个可执行文件,随便一个文件不能叫做程序,只有可以运行起来的,才可以称之为程序。不能被运行起来的文件仍然是文件(比如 xxx.txt)。

程序被运行起来(执行实例)被称为进程,某些操作系统的任务表可以显示正在执行的程序,window10下可以看到任务管理器,同样ubuntu也可以看到。

三:进程实例
ps -aux

 可以看到所有当前的正在运行的进程

可以看到%CPU(CPU损耗),%MEM (内存损耗),STAT(当前的状态),START(当前的启动时间),TIME(执行的时间),COMMAND(对应的命令/目录是哪一个),这就是当前ubuntu操作系统用命令运行起来的当前进程的查看

有的进程的状态是I,有的是S,Ss,R,这些都是进程的状态,需要了解

四:操作系统如何管理进程

如果操作系统要想管理进程,管理软件运行,只是依靠软件的名字是不够的,进程下应用程序会出现同名的情况。因此需要了解PID(process ID)如下(进程ID号----有且只有一个)

每个linux进程都一定有一个唯一的数字标识符,称为进程ID(process ID)。进程ID总是一非负整数(0-65535)

每一个程序在运行的时候变成了一个进程,这个时候操作系统就会为这个进程分配一个单独的ID号,这个ID号数量总数65535,ID号是在65535内部之间随意取一个 。现在打开某一个程序,和之后打开某一个相同程序,ID号是不同的(随机分配0-65535之间随意的ID)

取PID是否有一定的顺序?

如图,PID,有1 2 3 4 但是没有5 ,虽然是有一定的顺序,但是是有缺失。

自己跑动的程序也会有一个PID

死循环例子 运行一下程序(重新生成解决方案),终端中跑一下

#include
using namespace std;

int main()
{
	while (1)
	{

	}
	return 0;
}

运行一下程序 

 

 查看进程

18::05有一个./main,同时PID是45244 

R+  表示  在运行

ctrl+c结束程序,./main再次运行程序

同样查看进程

 

可以看到18::06有一个./main,此时分配到的PID是45260 

由上示例看出,同一个程序,前后两次运行不同,pid号随机分配

 五:第一次运行的进程-0号进程
pstree

通过这个命令可以查看进程的一个树状结构-进程树

 

systemd就是最初的那个进程 (程序运行起来的最初的进程)

systemd其实还不算是真正的0号进程,因为0号进程在ubuntu中被隐藏掉了,ubuntu中只能看到1号进程。--相当于由这个1号进程来管理所有的进程,初始的进程就是一个进程管理者

Networkmanager----专门管理网卡,专门管理网络的

gdm3----是ubuntu的主题(登录界面)

vmtoolsd----虚拟机的工具 (也算一个进程)

 

sshd----安装的远程连接,ssh服务(以上的都是ubuntu操作系统运行起来都会有的基础进程)

六:进程的管理

这个管理称为PCB----P:process  C:conrtol  B:brok

Linux系统是一个多进程的系统,进程之间具有并行性、互不干扰的特点。

      linux中进程包含PCB(进程控制块)、程序以及程序所操纵的数据结构集,可分为“代码段”、“数据段”和“堆栈段”。

 每一个进程都有自己的代码,每一个进程都有自己的数据,每一个进程都有自己的堆栈,通过管理这些,来管理进程。

七:进程状态
•运行状态R(TASK_RUNNING) •可中断睡眠状态S(TASK_INTERRUPTIBLE) •不可中断睡眠状态D(TASK_UNINTERRUPTIBLE) •暂停状态T(TASK_STOPPED或TASK_TRACED) •僵尸状态Z(TASK_ZOMBIE) •退出状态X(TASK_DEAD)

八:进程状态转换

进程状态之间可以相互切换

 

九:Init进程 - 初始化进程
•进程ID为1通常是init进程,在自举过程结束时由内核调用。 •init进程绝不会终止。(关键点)(这个进程是用来管理其他进程的,这个进程杀不掉) •它是一个普通的用户进程(与交换进程不同,它不是内核中的系统进程),但是它以超级用户特权运行。

十:获取进程标识
•#include •#include •pid_t getpid(void);   返回:调用进程的进程I D •pid_t getppid(void);   返回:调用进程的父进程I D •uid_t getuid(void);   返回:调用进程的实际用户I D •uid_t geteuid(void);   返回:调用进程的有效用户I D •gid_t getpgid(void);   返回:调用进程的实际组I D •gid_t getegid(void);   返回:调用进程的有效组I D

如getpid 相当于在代码端可以直接看到,当前这个程序的一个进程号

 

#include
#include 
#include 


using namespace std;

int main()
{
	while (1)
	{
		cout << "pid = " << getpid() << endl;
		sleep(1);
	}
	return 0;
}

在终端运行查看一下id号

 

可以查看程序运行进程号 。

可以自己通过代码来创建一个新的进程,也就是说,程序不再是单一的一个main函数从头走到尾,现在的程序需要做到多进程开发,也就是说一个程序,main函数运行的时候,通过代码的编译链接执行,在代码当中创建出一个有很多个进程,叫做多进程的运行方式。

学习进程管理的目的--多进程运行方式

之后学习在代码中自己创建出进程---fork系统调用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007351.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号