FEATURED · 精选文章

进程与线程:从概念到实践

发布时间 / 2026/8/27 20:52:16
来源 / 创域科博编辑部
栏目 / 资讯中心
进程与线程:从概念到实践 1. 进程概念程序存放在外存中的一段代码的集合。进程是程序动态执行的过程包括创建、调度、消亡。2. 进程命令top根据 CPU 占用率查看进程信息。PID唯一区分进程的 ID 号。PPID父进程的 ID 号。ps -ef查看进程信息。pstree查看进程关系。ps -aux查看进程运行状态。kill杀死进程。任务后台执行./a.out 查看后台执行的任务jobs将后台任务放到前台执行fg 编号查看终端下的前后台任务ps修改进程优先级nice -n 优先级 进程任务、renice -n 优先级 进程PID3. 进程的创建3.1 进程空间划分32 位操作系统下进程占 0 - 4G 虚拟内存空间可以划分为文本段、数据段及系统数据段。文本段指令。数据段字符串常量、未初始化全局变量/静态变量、初始化的全局变量/静态变量。系统数据段堆区、栈区。3.2 特性进程空间是独立的每个进程独享进程空间。所有进程共享 0-4G 虚拟内存空间。分时复用。3.3 进程调度多个进程任务需要同时运行。常见进程调度算法先来先执行后来后执行。高优先级调度算法。时间片轮转调度算法宏观并行微观串行。多级队列反馈调度算法。负载均衡调度算法。时间片CPU 在进程任务中执行的一小段时间称为时间片。3.4 进程状态就绪态R没有被 CPU 轮转到的正在执行的任务。运行态R正在被 CPU 执行的任务。可唤醒等待态S由于缺少资源让程序暂时挂起的状态等待过程中可以被唤醒。不可唤醒等待态D等待过程中不会被唤醒称为不可唤醒等待态。停止态T由于系统需要让进程任务暂停则将进程设置为停止态。僵尸态Z进程代码执行结束空间没有被回收。结束态X代码执行结束空间被回收的时刻。4. 进程相关的函数接口4.1 forkpid_t fork(void); 功能创建一个子进程空间 参数缺省 返回值成功父进程中返回子进程的 PID子进程中返回 0失败返回 -14.2 getpidpid_t getpid(void); 功能返回调用进程的进程 ID 号4.3 exitvoid exit(int status); 功能进程结束主函数中调用 exit 与调用 return 效果相同函数体内调用 return函数结束调用 exit 让进程结束。4.4 练习创建一个进程的两个子进程子进程中打印自己的 PID 和父进程的 PID父进程中打印自己的 PID 和 2 个子进程的 PID。5. 进程的消亡5.1 僵尸进程产生原因进程代码执行结束空间没有被回收就会成为僵尸进程。5.2 如何避免产生僵尸进程让父进程先结束子进程成为孤儿进程被 init 进程收养子进程结束init 进程回收子进程空间避免产生僵尸进程。子进程结束父进程回收子进程空间就能避免子进程成为僵尸进程。6. 进程回收函数接口pid_t wait(int *wstatus); 功能回收子进程空间 参数wstatus存子进程结束状态空间的首地址 返回值成功返回回收到的子进程的 PID失败返回 -1相关宏WIFEXITED(wstatus)检测子进程是否正常退出。WEXITSTATUS(wstatus)获得子进程退出时的值。WIFSIGNALED(wstatus)检测子进程是否被信号杀死。WTERMSIG(wstatus)获得杀死信号的编号。wait 回收子进程空间避免子进程成为僵尸进程wait 具有阻塞功能能够实现多任务同步。6.1 waitpidpid_t waitpid(pid_t pid, int *wstatus, int options); 功能回收指定子进程的空间 参数pid要回收的子进程的 PID wstatus存放子进程结束状态空间的首地址 options0 阻塞回收 WNOHANG 非阻塞回收 返回值成功返回回收到的进程的 ID 号失败返回 -1WNOHANG设置非阻塞如果子进程没有结束返回 0。7. exec 函数族exec 函数族的功能利用进程空间执行另一段代码。int execl(const char *path, const char *arg, ... /* (char *) NULL */); int execlp(const char *file, const char *arg, ... /* (char *) NULL */); int execle(const char *path, const char *arg, ... /*, (char *) NULL, char * const envp[] */); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execvpe(const char *file, char *const argv[], char *const envp[]);参数说明path路径名。file文件名。l参数以列表形式传递。v参数以指针数组形式传递。p在系统路径 PATH 下查找文件名。e执行另一段代码时更新进程的环境变量。返回值成功会执行另一份代码失败返回 -1。8. 环境变量环境变量进程在执行代码过程中临时存放信息的变量称为环境变量。extern char **environ;int setenv(const char *name, const char *value, int overwrite); 功能设置环境变量的值 参数name环境变量名称 value设置的环境变量的值 overwrite非 0 覆盖0 不会覆盖 返回值成功返回 0失败返回 -1
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻