进程与进程间通信(1)
1.进程
进程(process) 是一个已经开始执行但还没终止的程序实例。 Linux 系统下使用 ps 命令可以查看到当前正在执行的进程。每个进程包含有进程运行环境、内存地址空间、进程ID、和至少一个被称为线程的执行控制流等资源。同一个程序可以实例化为多个进程实体。操作系统中所有进程实体共享着计算机系统的 CPU、外设等资源。
2.进程状态
D: 不可中断的深度睡眠状态,处于这种状态的进程不能响应异步信号;
R: 进程处于运行态或就绪状态, 只有在该状态的进程才可能在 CPU 上运行。而同一时刻可能有多个进程处于可执行状态;
S:可中断的睡眠状态,处于这个状态的进程因为等待某种事件的发生而被挂起。;
T: 暂停状态或跟踪状态;
X: 退出状态,进程即将被销毁;
Z: 退出状态,进程成为僵尸进程。
3.main函数
进程创建后通常需要调用 exec 族函数来装载程序可执行映像,并在完成装载后调用程序的 main()函数。
参数 argc 是命令行参数的数目;
参数 argv 是指向参数的各个指针所构成的数组。argv[0]为程序的名称,后续的数组元素组成参数列表, argv[argc]值为 NULL;
原型3 的 env 参数指向环境变量字符串的数组
4.进程ID
进程在创建时,内核会为之分配一个进程ID用来标识当前的进程,类型为 pid_t 的整数并保持同一时刻是唯一值,它最大值为pid_max 值 。当进程退出时,它的进程 ID 可回收循环使用。
getpid()函数可以获取当前进程的进程 ID。
5.父进程与子进程
进程创建时,创建进程为新进程的父进程,新进程是创建进程的子进程。 getppid()函数获取父进程的 PID 。
6.UID,GID
UID:用户ID,GID:用户的组ID。使用 id 命令可以列出用户的 id 。当执行一个程序时,该程序将获取当前用户的 UID 及 GID 作为进程的权限。
7.环境变量
(1)通过 main()函数的第 3 个参数 env 获取。 数组最后一个元素为 NULL
(2) 通过 environ 全局变量获取。 在加载进程的时候,系统会为每一个进程复制一份 系统环境变量副本, 并保存在全局变量 environ 中。
(3)通过 getenv()函数获取。 Linux 系统提供 getenv()、 setenv()等函数来操作环境变量,
8.标准IO