进程基本概念

1.进程的描述: 程序的一个执行实例。

正在执行的程序。

能分配处理器并由处理器执行的实体。

从内核角度来看:担当分配系统资源(cpu和内存)的实体

2.文件(即程序,存放在磁盘的普通文件)执行代码,化为进程(加载到内存),创造相应描述它的数据结构。PCB(Linux进程描述块task_struct):描述进程属性即进程属性的集合,包括:调度信息,资源信息,优先级信息,代码信息,数据信息,进程切换信息。优先级不是得到得不到的表现,而是描述得到某种资源的先后顺序。进程得到cpu资源,优先级更多表现在运行中。

进程的两个基本元素是程序代码(可能被执行相同程序的其他进程共享)和代码相关联的数据集。进程是一种动态描述,但是并不代表所有的进程都在运行。(进程在内存中因策略或调度需求,会处于各种状态)

3.进程标识符:pid(进程id),ppid(父进程id),在Linux下,C程序进过4个步骤生成可执行文件,分别是预处理,编译,汇编,链接(静态链接,动态链接)指令如gcc -E test.i test.c,gcc -S test.s test.i,

gcc -c test.o test.s.r如果有多个源文件可使用创建Makefile/makefile自动化编译,根据依赖关系动作生成工程,但是在Makefile中会生成一系列临时文件,如test.i,test.s等,需使用伪目标文件删除临时文件。

eg:

(目标文件)test:test.c(依赖文件)

Tab键(语法规定)gcc -o test test.c(依赖关系)

.PHONY:clean

clean:

Tab键rm -rf  test

如此在运行时输入make,即可生成test目标文件,./test运行即可,若要重新编译,make clean,再make即可。

4.进程状态:

static const char * const task_state_array[] = {

"R (running)", /* 0 */ 运行

"S (sleeping)", /* 1 */ 线程,进程正常sleep,可被唤醒

"D (disk sleep)", /* 2 */深度睡眠,不可中断进程,杀不了,唤不醒,只能关机重启

"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */ 
"Z (zombie)", /* 32 */ 僵死

};

5.ps axu|grep proc显示进程

ps axu|head -n1显示头项目信息

|表示管道,传输资源,grep经过过滤器,包含proc字符串那份显示出来

6.僵尸进程:一个子进程在其父进程没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收。

代码:
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
int main()
{
pid_t pid = getpid();
pid_t id = fork();
if ( -1 == id ){
printf("fork error! return code is : %d\n",errno);
return 2;
}
else if( 0 == id ){ //child
printf("child pid is : %d\n", getpid());
exit(3);
}

else{ //father

printf("father pid is : %d, return pid is : %d\n", getpid(), id);
sleep(30);
}
return 0;

}

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

时间: 2024-10-19 21:31:47

进程基本概念的相关文章

进程的概念

进程的概念: OS:程序的一个执行实例.正在执行的程序.能分配处理器并由处理器执行的实体. 内核:担当分配系统资源的实体. 进程的两个基本元素是程序代码和代码相关联数据集.进程是一种动态描叙,但不代表所有的进程都在运行. 进程描述: 大体上说,进程的信息被放在一个进程控制块的数据结构之中,可以认为进程属性的集合. 进程控制块: 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体. task_struct是Linux内核的一种

漫漫运维路——进程基本概念及管理相关工具介绍

进程的概念     进程是系统进行资源分配的基本单位,当一个应用程序启动时就向内核发起请求,然后由进程创建出新的进程,此时应用程序就启动了.创建进程的进程此时被称作父进程,而被创建出来的进程被称为子进程,此外子进程不可脱离父进程而存在,当一个父进程被销毁时,其子进程也会一并被销毁. 在Linux中,进程被内核所管理,内核为每一个进程虚拟处一块内存空间,所以当进程被调度到内存中执行时,只能看到自己和内核,从而避免进程之间发生冲突,影响其他进程的运行.但是进程独立并不代表其不能互相通信,当进程之间需

进程控制概念简介 多线程上篇(三)

进程控制 进程的基本数据信息是操作系统控制管理进程的数据集合,这些信息就是用来控制进程的,此处我们说的进程控制就是进程的管理. 比如进程有状态,那么进程的创建.终止,状态的切换,这都不是进程自主进行的,都是通过操作系统进行管理的 如下图所示,所有的相关数据都是操作系统用来管理维护进程的 操作系统抽象出进程概念的核心是为了运行程序 所以进程的执行态是最为核心的 其他的状态则是为了更好的控制管理进程以及进程的并发执行而附加的 所以,一定程度上来讲,操作系统对于进程的控制,可以认为是对于进程的不同状态

进程通信概念简介 多线程上篇(六)

进程通信指的是进程间的信息交换 ,IPC(Inter-Process Communication,进程间通信) 之前说到: 进程通信就相当于一种工作方式.沟通形式,比如你给我一个SVN标签号并且告知我意图,我去库中检索指定标签修改的指定内容,就完成了一个任务的协作. 进程同步中,也有信息的交换,比如互斥量访问,再比如生产者和消费者,共享缓冲池,但是这些通常被称之为低级的进程通信. 以信号量为例,如果你说我在塔顶点亮灯表示危险,否则表示安全,这没问题,如果你想用灯亮灯灭来像QQ一样,大段大段的传递

多线程和进程的概念

1.耗时的操作使用线程,提高应用程序响应 2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求. 3.多CPU系统中,使用线程提高CPU利用率 4.改善程序结构.一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改. 使用多线程的理由之一是和进程相比,它是一种非常花销小,切换快,更"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段.堆栈段和数据段,这是

Android系统开发(8)——linx进程基本概念

一.proc文件系统 传统意义上的文件系统是用于块设备上信息的存储,/proc这个目录是一个虚拟文件系统,它放置的数据都是在内存当中,所以这个目录本身不占用任何硬盘空间.主要包含如下系统信息: 内存管理 系统进程特征数据 文件系统 设备驱动程序 系统总线 电源管理 终端 系统控制参数 用 户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件 时,proc文件系统是动态从系统内核读出所需信息并提交的.下面列出

[OS] 进程的概念

进程概念: 1.程序在执行中 2.一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位. 进程与程序的差别: ·进程----动态, 程序----静态 ·进程----有生命周期,短暂的, 程序----相对长久的 ·进程----具有并发性, 程序----没有 ·进程是竞争计算机系统资源的基本单位,其并发性受到系统本身的制约 ·不同进程可以包含同一程序,只要程序所对应的数据集不同 一个进程包括: ·Text section 文本段(代码段)-------程序

堆栈和父子进程的概念

栈帧:堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间 函数调用框架.传递参数.保存返回地址.提供局部变量空间. 堆和栈的关系: 堆栈一般指的是栈:实际上堆和栈是不同的. 堆需要用户在程序中显性申请,空间由用户维护,释放空间不当会导致内存泄漏:但是栈不用,由系统自动完成. 堆的空间比较大,栈比较小. 栈的生命周期短,随着函数退出和返回消亡:堆的生命周期可以是整个程序执行完成退出,但是一般用户都会在使用时申请空间,不用时释放空间,防止空间消耗完毕. 在fork之后处理的文件描述符有两种常见

关于nginx的master进程可worker进程的概念

nginx的master和worker进程之间的关系,就像是坐台的"***"与"老鸨"之间的关系. 假如说一个妓院有多名***,而管理每个***的老鸨只有一个,其中老鸨负责对外招揽业务,而***负责干活(处理业务),如果一个***接待不完这些客人,老鸨会把随后的客人交给其他的***去接待. 在这里,老鸨就属于master进程,客户端所有的请求都是由master来接收,***呢,就相当于woker进程,(真正处理客户端请求的是下面这些woker进程).