一、进程的基本概念
1.进程的定义
进程是描述程序执行过程和资源共享的基本单位
主要目的:控制和协调程序的执行
2.linux下进程相关函数
用户与组ID:参阅上一讲:https://blog.youkuaiyun.com/qq_38801934/article/details/103142068
创建进程:system(),fork(),exec()
终止进程:kill()
等待进程终止:wait(),waitpid()
3.进程组
由一个或者多个相关进程组成,目的是为了进行作业控制。
进程组的主要特征:信号可以发送给进程组中的所有进程,并使该进程组中的所有进程终止、停止或运行。
每个进程组都属于某个进程组
4.进程组函数
获取进程组ID:pid_t getpgid(pid_t pid);
- 返回pid进程的进程组ID;若pid为0,则返回当前进程的进程组ID;出错时返回-1,并设有errno值。
设置进程组ID:int setpgid(pid_t pid,pid_t pgid);
- 若pid为0,则使用调用者PID;若pgid为0,则将pid进程的进程PID设为进程组ID;成功时返回0,出错时返回-1,并设errno值。
5.会话(session)
- 会话为一个或多个进程组的集合,包括登录用户的全部活动,并具有一个控制终端
- 登录进程为每各用户创建一个会话,用户登录shell进程成为会话首领,其PID设为会话ID
- 非会话首领进程通过调用setid()函数创建新会话,并成为首领
进程组函数
获取会话ID:pid_t getsid(pid_t pid);
- 返回pid进程的会话ID;若pid为0,则返回当前进程会话ID;成功时返回会话ID,出错时返回-1,并设errno值。
设置会话ID:pid_t setsid();
- 成功时返回新创建的会话ID,出错时返回-1,并设errno值
二、信号(signal):是一种进程通讯机制
- 信号量是发送给进程的特殊异步消息
- 当进程接受到信息时立即处理,此时并不需要完成当前函数调用甚至当前代码行。
- LInux操作系统中有多种信号,具有不同的含义;系统以数字标识不同的信号,程序一般以名称引用信号;
系统信号
- 系统信号缺省时处理逻辑:终止进程;生成内核转储文件;忽略
- 使用“kill -l”命令可查看操作系统支持的信号列表,不同的系统可能有所不同。
进程间发送的信号
- SIGTERM、SIGKILL:终止进程信号,前者是请求(接收信号的进程可以忽略他),后者是强制终止
- SIGUSER1、SIGUSER2:用户自定义信号,可用于向进程发送命令
信号处理
- 进程接受到信号之后,根据信号配置进行处理
- 缺省配置:在程序没有处理时,确定该信号如何处理
- 程序处理信号的方式:按照信号处理例程提供的函数指针来调用它所指定的函数
- sigaction()函数:设置信号配置(需要的时候再详细了解)