论‘进程’相关操作

★进程相关概念

(1)进程:是一个能够分配处理器并由处理器执行的,能够携带资源的活动实体。

(2)进程控制块(PCB):每一个进程中都有唯一的一个进程控制块来保存进程的相关信息,实际PCB就是一个task_struct的结构体。具体的见http://10740590.blog.51cto.com/10730590/1785457

(3)进程状态:进程是一个活动实体,并不代表进程是一直处于运行状态,一个进程可以有很多种状态。

△R(running)表示运行状态

△S(sleeping)表示可唤醒睡眠状态

△D(disk sleep)表示不可唤醒的睡眠状态

△T(stopped)表示暂停状态

△t(tracing stop)表示终止状态

△X(dead)表示死亡状态

△Z(zombie)表示僵尸状态

★进程创建执行

进程的创建有两种方法:fork()和execve()。两者都是创建的进程都是运行进程的子进程,创建后的子进程会得到父进程中的数据段、栈段、堆区域的一份拷贝,这些子进程都是可以对其进行更改的,但是文本段是两者共享的,不能被子进程进行修改。

下面是fork的使用方法:

运行结果:

★进程终止

进程终止有以下几种方式:

(1)从main函数返回

(2)调用exit函数

(3)调用_exit或_Exit;

(4)最后一个线程从启动例程返回

(5)最后一个线程调用pthread_exit;

(6)调用abort函数

(7)接到一个信号并终止

(8)最后一个线程对取消请求做出相应

前5种为正常终止,后三种为异常终止。从main函数中return退出为进程退出,因为没有在继续执行的代码,但是在程序中间的任何位置return,不算是进程退出,只能算是程序调用结束。

exit返回:

exit()还让return系统会强制刷新缓冲区,文件描述符

_exit()强制直接结束,不需要管其余的东西

_Exit()和_exit是相同的

★exit函数与atexit函数

(1)exit、atexit函数定义

头文件:#include <stdlib.h>                  头文件:#include <stdlib.h>

void exit(int status);                                int atexit(void (*fun)(void));

一个进程可以登记若干个函数,这些函数由exit自动调用,这些函数被称为终止处理函数,atexit函数就可以登记这些函数。exit调用终止处理函数的顺序和atexit登记的顺序是相反的,如果一个函数可以被多次的登记,也可以被多次的调用。

运行结果:

★栈帧

1.堆栈

堆栈是C语言以及其他语言运行时必须使用的一块空间,它的主要作用是函数调用、传递参数、保存返回地址、提供局部变量空间的。

①堆需要程序员自己申请,并且需要显示的进行释放,申请和释放必须是成对出现的,要不然就会出现内存泄漏,因为堆上的空间生命周期都是一直存在,直到手动进行释放。而栈是系统自动进行分配的,回收也是进程运行结束时系统自动回收。

②堆的空间较大,栈的空间小,一般申请大的内存都在堆上。

2.栈帧的详细解释:http://blog.csdn.net/yxysdcl/article/details/5569351

时间: 2024-12-24 17:47:28

论‘进程’相关操作的相关文章

linux下进程相关操作

一.定义和理解 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动. 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域.数据区域和堆栈区域.文本区域存储处理器执行的代码:数据区域存储变量和进程执行期间使用的动态分配的内存:堆栈区域存储着活动过程调用的指令和本地变量. 第二,进程是一个“执行中的程序”.程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们

进程相关操作

python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程. Python提供了multiprocessing.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. 简单的进程程序: import multiprocessing #引入模块 def task(arg): print(arg) def run()

Linux下tomcat相关操作

tomcat安装: 直接到官网下载tar包解压即可. tomcat相关操作: 首先,进入Tomcat下的bin目录,例如:cd /usr/tomcat/bin 启动Tomcat:./startup.sh 关闭Tomcat:./shutdown.sh 查看Tomcat是否关闭:ps -ef|grep java,若信息较多表示未关闭,反之已关闭. 如果你想直接干掉Tomcat,你可以使用kill命令,直接杀死Tomcat进程:例如可以根据上面查看tomcat是否关闭的命令获取到进程ID,然后直接ki

10、自学——Linux的学习进度与任务【用户和用户组相关操作】

用户和用户组相关操作 用户和用户组定义: 用户:资源获取标识符(资源分配),是安全权限模型的可信要素之一 用户组:用户组是指多个用户的集合,方便对一类需要同样权限的用户授权   密码:用户认证  Linux是多用户.多任务的操作系统.  多用户指:多人同时使用系统资源:多任务:同时运行多个进程 用户和用户组的类别: 1.用户:名称解析库 /etc/passwd a.管理员 root 用户标识(UID)为0 b.普通用户及系统用户  普通用户的用户标识(既UID):   CentOS 5,6: 5

docker实战之centos6.5上安装、镜像、容器相关操作

学习docker前,理解以下几个概念有助于更好的使用docker.镜像,容器,仓库.镜像,就是一个操作系统环境,里面只有你需要的几个应用程序,如apache,mysql,php之类,只读模板.容器,从镜像创建的运行实例.可视为一个简易环境中和其中运行的应用.仓库,存放镜像的地方.学过git的同学可能更容易理解. 一.安装docker时,增加第三方源epel如果是centos7,下载并安装这个软件包#wget http://mirror.hust.edu.cn/epel/beta/7/x86_64

关于linux操作系统中进程相关问题的学习笔记

关于linux操作系统中进程相关问题的学习笔记 1.摘要   进程的经典定义是一个执行中程序的实例.系统中的每个程序都运行在某个进程的上下文中(contest)中.上下文是由程序运行正确运行所需的状态组成的.这个状态包括存放在内存中的程序的代码和数据,它的栈.通用目的寄存器的内容.程序计数器.环境变量以及打开文件描述符合的集合.在本次学习笔记中,我是以linux为例,学习了以下三个方面的知识:操作系统如何组织进程.进程状态如何转换以及进程是如何调度的.在最后我还谈了下自己对操作系统进程模型的一些

开启进程相关

一:开启进程的两种方式: 方式一(图1):通过multiprocessing模块,导入类Process来开启进程,通过类Process实例化得到对象,在Windows系统 上,开启子进程的操作必须放到   if __name__ == '__main__'的子代码中,然后调用对象下的start方法,开启一个 子进程,从而实现并发效果,如图1: 方式二(图2):通过自定义一个类的方式来实现,但是必须使用里面的run方法,然后调用start方法的时候就会自动调 用run,从而实现并发效果,如图2:

electron窗口相关操作(放大缩小退出,可拖动,可resize等)

如下是对窗口最大化,最小化等相关操作: import { ipcMain, ipcRenderer, remote } from 'electron' import is from 'electron-is' // ipc 通信发送的窗口状态改变事件的channel名称 export const windowStateChangeChannel = 'window-state-changed' // window的当前状态 export const WINDOW_STATE = { FULLSC

二叉树的相关操作

#include<stdio.h> #include<malloc.h> #define MAXSIZE 20 typedef char TEelemtype; typedef struct BiTNode{ TEelemtype data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //队列的方式 typedef struct queueelem { BiTNode* b[MAXSIZE]; int front,rear;