Linux操作系统-进程和信号(2)
分类:Linux环境编程
进程的标识
有一些函数可以返回进程的标识符
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void); //返回调用进程的进程ID
pid_t getppid(void); //返回调用进程的父进程
uid_t getuid(void); //返回调用进程的实际用户ID
uid_t geteuid(void); //返回调用进程的有效用户ID
gid_t getgid(void); //返回调用进程的实际组ID
git_t getegid(void); //返回调用进程的有效组ID
进程的状态
- 运行状态:指正在CPU中运行或者就绪的状态,包括:内核运行态,用户运行态,就绪态。Linux内核并不对此三种状态进行区分
- 可中断睡眠状态:当进程处于可中断等待状态时,系统不会调度该进程执行。当系统产生一个中断或者释放了进程正在等待的资源,或者进程收到一个信号,都可以唤醒进程转换到就绪状态
- 不可中断睡眠状态:不可中断,指的不是CPU不响应外部硬件中断,而是指进程不响应异步信号。处于该状态的进程不响应信号,只有使用wake_up()函数明确唤醒才能转换到就绪状态。该状态被设计用于保护内核的某些流程不被打断,或者在进行某些I/O操作时避免进程与设备交互的过程中被打断,造成设备陷入不可控状态。
- 暂停状态:当进程收到信号SIGSTOP,SIGTSTP,SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。
- 僵死状态(TASK_ZOMBIE):当进程已停止运行,但其父进程还没有询问其状态时,则该进程处于僵死状态
常见的状态字符有:
STAT字符 | 说明 |
---|---|
S | 睡眠。通常是在等待某个事件的发生 |
R | 运行/可运行,即在运行队列中,处于正在运行或即将运行状态 |
D | 不可中断的睡眠(等待,不响应异步信号)。通常是在等待输入或输出完成 |
T | 停止 |
Z | 僵尸进程 |
N | 低优先级任务 |
s | 进程是回话期首进程 |
+ | 进程属于前台进程组 |
l | 进程是多线程的 |
< | 高优先级任务 |
进程的控制
system函数
在进程中执行另一个程序的一个简单方法是调用标准库函数system,原型如下:
#include <stdlib.h>
int system(const char *command);
解释:system函数运行command命令并等待该命令完成&#