1.进程概述
操作系统的主要任务是管理计算机的软、硬件资源。现代操作系统的主要特点在于程序的并行执行。Linux操作系统亦是如此,操作系统借助于进程来管理计算机的软硬件资源,支持多任务的并行执行,操作系统最核心的概念就是进程。
2.什么是进程?
程序:
通常为二进制程序放置在储存介质中。(如硬盘,光盘,软盘,磁带等),以物理文件的形式存在。
进程:
程序被触发之后,执行者的权限与属性,程序的程序代码与所需数据等都会被加载到内存中,操作系统并给予这个内存的单元一个标识符(PID),可以说 :进程就是一个正在运行中的程序。
3.进程标识
函数声明 | 功能 |
---|---|
pid_t getpid() | 获得进程ID |
pid_t getppid() | 获得进程的父进程ID |
pid_t getuid() | 获得进程的实际用户ID |
pid_t geteuid() | 获得进程的有效用户ID |
pid_t getgid() | 获得进程的实际组ID |
pid_t getegid() | 获得进程的有效组ID |
用户ID与组ID的相关概念如下所示
- 实际用户ID(uid) :标识运行该进程的用户
- 有效用户ID(euid):标识以什么用户身份来运行进程。
- 实际组ID(gid):它是实际用户所属的组的组ID。
- 有效用户组ID(egid):是有效用户所属的组的组ID。
3.进程的结构
Linux中一个进程由三部分组成:代码段 、数据段、堆栈段
代码段 | 数据段 | 堆栈段 |
---|---|---|
可执行代码 | 全局变量,常量静态变量 | 动态分配内存变量 |
4.Linux进程状态
- 运行状态R(unnable):
进程正在运行或在运行队列中等待运行。 - 可中断等待状态S(leeping):
进程正在等待某个事件完成。等待过程中可以被信号或定时器唤醒。 - 不可中断等待状态D(uninterruptible sleep):
进程也正在等待某个事件完成,在等待中不可以被信号或定时器唤醒,必须等待直到等待的事件发生。 - 僵死状态Z(ombile):
进程已经终止,但进程描述符依然存在,直到副进程调用wait()函数后释放。 - 停止状态T(raced or stopped):
进程因为受到SIGSTOP、SIGSTP、SIGTIN、SIGTOU信号后停止运行或者该进程正在被跟踪(调试程序时,进程处于被跟踪状态)。
5.进程控制
在Linux系统中,对于进程进行控制的主要系统调用如下所示
系统调用 | 功能 |
---|---|
fork | 用于创建一个新进程 |
exit | 用于终止进程 |
exec | 用于执行一个应用程序 |
wait | 将副进程挂起 |
getpid | 获取当前进程的ID |
nice | 改变进程的优先级 |