概述
一、Linux 进程
1、进程概念
进程是一个动态的实体,是程序执行的一次过程。进程是操作系统资源分配的基本单位。
区分进程和程序,进程是动态的,程序是静态的;进程是运行中的程序,程序是一些可执行的代码。
Linux下可通过命令ps或pstree或ps -Af查看当前系统中的进程。
如图所示:
再认识几个ID:
- UID:user id = 用户ID
- PID:program id = 进程ID
- PPID:parent program id = 父进程ID
2、进程标识
在unistd.h头文件中,以下是获取各种进程ID的函数表。
注:
- 有效用户ID(euid):表示以什么用户身份来运行进程。例如,某个普通用户A,运行了一个进程,而这个程序是以root身份来运行的,那么这个程序运行时就具有root权限。此时实际用户ID是A用户的ID,而有效用户ID是root用户ID。
- 实际用户ID(uid):表示运行该进程的用户。
- 实际组ID(gid):表示实际用户所属的组ID。
- 有效组ID(egid):表示有效用户所属的组ID。
3、Linux 进程的结构
Linux中一个进程有3部分组成:代码段、数据段和堆栈段。如图所示:
代码段 | 数据段 | 堆栈段 |
代码段:存放程序的可执行代码。
数据段:存放程序的全局变量、常量、静态变量。
堆栈段:堆存放动态分配的内存变量,栈用于函数的调用,存放函数的参数、函数内部定义的局部变量。
4、Linux 进程状态
Linux 系统中进程有以下几种状态。
- 运行状态R(runnable):进程正在运行或在运行队列中等待运行。
- 可中断等待状态S(sleeping):进程正在等待某个事件完成,在等待中不可以被信号或定时器唤醒,必须等待直到等待的事件发生。
- 僵死状态Z(zombile):进程已终止,但进程描述符依然存在,直到父进程调用wait()函数后释放。
- 停止状态T(traced or stopped):进程因为收到SIGSTOP、SIGSTP、SIGTOU信号后停止运行或者该进程正在被跟踪(调式程序时,进程处于被跟踪状态)
5、进程控制
Linux 进程控制包括创建进程、执行新程序、退出进程以及改变进程优先级等。
用于对进程进行控制的主要系统调用如下所示:
- fork:用户创建一个进程。
- exit:用于终止进程。
- exec:用于执行一个应用程序。
- wait:将父进程挂起,等待子进程终止。
- getpid:获取当前进程的进程ID。
- nice:改变进程的优先级。
6、进程的内存映像
①Linux 下程序转化成进程
Linux 下C程序的生成分为4个阶段:预处理、编译、汇编、链接。编译器gcc经过前三步将源程序文件转化为目标文件。若程序有多个目标文件或程序中使用了库函数,编译器还要将所有的目标文件或所需的库链接起来,最后生成可执行程序。
程序转化为进程通常要经过以下步骤:
- 内核将程序读入内存,对程序分配内存空间。
- 内核为该进程分配进程标识符(PID)和其他所需资源。
- 内核为该进程保存PID及相应的状态信息,把进程放到运行队列中等待执行。程序转化为进程后就可以被操作系统的调度程序调度执行了。
②进程的内存映像
从内存的低地址到高地址的映像布局依次如下:
- 代码段:二进制机器代码。
- 数据段:存储已被初始化的变量,包括全局变量和已被初始化的静态变量。
- 为初始化数据段:存储未被初始化的静态变量,也被称为bss段。
- 堆:用于存放程序运行中动态分配的变量。
- 栈:用于函数调用,保存函数的返回地址、函数的参数、函数内部定义的局部变量。
最后
以上就是爱听歌蜻蜓为你收集整理的Linux进程学习(一)一、Linux 进程的全部内容,希望文章能够帮你解决Linux进程学习(一)一、Linux 进程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复