Linux进程学习(一)

一、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经过前三步将源程序文件转化为目标文件。若程序有多个目标文件或程序中使用了库函数,编译器还要将所有的目标文件或所需的库链接起来,最后生成可执行程序。

程序转化为进程通常要经过以下步骤:

  1. 内核将程序读入内存,对程序分配内存空间。
  2. 内核为该进程分配进程标识符(PID)和其他所需资源。
  3. 内核为该进程保存PID及相应的状态信息,把进程放到运行队列中等待执行。程序转化为进程后就可以被操作系统的调度程序调度执行了。

②进程的内存映像

从内存的低地址到高地址的映像布局依次如下:

  • 代码段:二进制机器代码。
  • 数据段:存储已被初始化的变量,包括全局变量和已被初始化的静态变量。
  • 为初始化数据段:存储未被初始化的静态变量,也被称为bss段。
  • 堆:用于存放程序运行中动态分配的变量。
  • 栈:用于函数调用,保存函数的返回地址、函数的参数、函数内部定义的局部变量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值