Linux: 进程(控制)

本文围绕Linux进程展开,介绍了进程的创建、终止、等待和替换操作。进程终止有多种方式,可通过退出码或信号定位问题;进程等待能回收子进程资源、解决僵尸进程;进程替换通过exec系列函数加载新程序,还给出了bash简单实现的场景示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程的创建

pid_t fork(void)

功能: 创建新的进程
头文件: <unistd.h>
返回值: 给父进程返回子进程的pid, 给子进程返回0, 失败返回-1
特点: 父子进程代码共享, 若子进程发生写操作(OS进行写时拷贝)

进程的终止

1.进程常见的退出方式

  • 代码跑完退出
    • 结果正确
    • 结果不正确(可以查看退出码定位出错原因)
    • 如:  return退出,  exit函数退出 
  • 代码没跑完,程序崩溃(此时退出码无意义)
    • 如: 信号终止(可以查看退出信号)

2.操作

void exit(int status);

功能: 进程的退出
头文件:<unistd.h>
参数:status 定义了进程的终止状态,父进程通过wait来获取该值

进程的等待

1.功能

  • 回收子进程资源(可以解决僵尸进程问题)
  • 关心派发给子进程的任务完成情况(是否正常, 正确)通过退出码, 退出信号

2.操作

pid_t wait(int*status);

头文件: <sys/types.h>, <sys/wait.h>
返回值:成功返回被等待进程pid,失败返回-1。
参数:获取子进程退出状态,不关心则可以设置成为NULL(输出型参数)

pid_ t waitpid(pid_t pid, int *status, int options);

头文件: <sys/types.h>, sys/wait.h>
返回值:
       正常返回收集到的子进程的id
       出错返回-1, 这时errno会被设置成相应的值以指示错误所在


参数: 
    pid 为-1表示等待任意一个子进程, >0为等待指定的子进程
    status: 状态码(次第8位):(status>>8)&0xFF.  信号(低7位):status & 0x7F
    options: 默认为0:阻塞等待  WNOHANG:非阻塞等待,若没有子进程可以等就返回0
       

WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出)
WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。(查看进程的退出码)

        
 

  

进程的替换

1.概念

程序替换:是通过特定的接口,加载磁盘上一个全新的程序(代码+数据)

2.原理

3.操作

exec系列函数

  • 头文件<unistd.h>
  • int execl(const char *path, const char *arg, ...);
  • int execlp(const char *file, const char *arg, ...);
  • int execle(const char *path, const char *arg, ...,char *const envp[]);
  • int execv(const char *path, char *const argv[]);
  • int execvp(const char *file, char *const argv[]);
  • int execve(const char *path, char *const argv[], char *const envp[]);

命名解释

  • l  (list) : 表示参数采用列表
  • v(vector) : 参数用数组
  • p(path) : 有p自动搜索环境变量PATH
  • e(env) : 表示自己维护环境变量

返回值

  • 成功就没有返回值(进程已被替换)
  • 失败返回-1

场景

  • bash的简单实现(命令解释器)
  • 父进程读取数据分析, 子进程执行指令
  • 创建子进程来执行exec系列函数(执行其程序的功能 + 保证自己不会被替换)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值