引言
进程是什么?
要理解进程,首先要从程序这个概念开始。程序是存储在磁盘上,为了完成某些任务的一系列指令的有序集合。
而进程,它是当程序执行时,加载到内存中的个体。
操作系统为进程分配独立内存资源,如虚拟地址空间、堆栈等,此外,操作系统在内核中为该进程创建管理节点PCB(进程控制块),以便于系统对其控制和调度。
环境变量
环境变量是运行某些程序所必须的环境配置。大多以键值对的形式存在于文件系统的/etc/profile文件中。
相关函数如下:
函数声明:
#include <stdlib.h>
char *getenv(const char *name);
int setenv(const char *name, const char *value, int rewrite);
int unsetenv(const char *name);//删除name的定义。
进程标识
每个进程都有一个非负整型表示的唯一进程ID。类型为pid_t。
系统中有一些专用进程。例如ID为0的调度进程,ID为1的init进程。
init进程是由内核完成自举后调用的第一个进程,它以超级用户特权运行。
获取进程标识的函数:
获取进程ID号:
#include <unistd.h>
pid_t getpid(void);
返回调用进程的进程ID
pid_t getppid(void);
返回调用进程的父进程ID
uid_t getuid(void);
返回调用进程的实际用户ID
uid_t geteuid(void);
返回调用进程的有效用户ID
gid_t getgid(void);
返回调用进程的实际组ID
gid_t getegid(void);
返回调用进程的有效组ID
进程类型
- 交互进程
和终端相关,如果终端关闭,进程消亡。既可以是前台(./a.out)也可以是后台(./a.out &)。前台进程既可以读也可以写,后台进程只能写数据 - 守护进程
和终端不相关,只能是后台进程。 - 孤儿进程
父进程退出、子进程被init进程收养 - 前台进程
进程状态
- R——Runnable(运行):正在运行或在运行队列中等待
- S——sleeping(中断):休眠中,受阻,在等待某个条件的形成或接收到信号
- D——uninterruptible sleep(不可中断):收到信号不唤醒和不可运行,进程必须等待直到有中断发生
- Z——zombie(僵死):进程已终止,但进程描述还在,直到父进程调用wait4()系统调用后释放
- T——traced or stoppd(停止):进程收到SiGSTOP,SIGSTP,SIGTOU信号后停止运行