进程控制概论

进程终止

进程终止

  • 正常执行完
    • 结果正确 退出码为0
    • 结果不正确 退出码非0 每种数字代表一种错误原因
    • 命令 echo $? 拿到上一个进程的退出码
    • 系统接口 char*strerror(int errnum);
  • 崩溃了 (进程异常)
    例如 野指针 写入不该写入的区域
    崩溃的本质:因为某些原因,导致进程收到了来自操作系统的信号,如 kill -9

进程等待

  • 等待:通过系统调用,获取子进程退出码或退出信号的方式,顺便释放内存
  • 接口 :
    • pid_t wait(int *status);
      • 头文件
        #include<sys/types.h>
        #include<sys/wait.h>
      • 参数
        status 一般设为NULL
    • pid_t wait(pid_t pid, int* status ,int options)
      • 头文件
        #include<sys/types.h>
        #include<sys/wait.h>

      • 参数
        pid:
        如果pid>0 为等待特定的子进程
        如果pid==-1,为等待任意一个子进程 效果与wait函数相同
        status:
        输出型参数 一种退出码+信号的表示等待子进程结束状态的方式
        options :
        0(默认) 阻塞等待
        WNOHONG 非阻塞等待
        在这里插入图片描述
        如果第七位为0 代表没有收到信号 即正常退出 否则为非正常退出

      • 返回值
        如果options 为0
        如果成功 返回子进程的PID 否则返回-1
        如果options 为WNOHONG
        如果成功 返回子进程PID 如果子进程存在但没有结束 返回0 如果出错 返回-1

      进程替换

      • 接口
        #include<unistd.h>
        • int excle(const charpath, const char arg, …);
          • 参数
            path 一个路径 代表你要执行的程序的位置
            arg 代表你要执行的方式
          • 返回值
            如果有返回值 一定是失败的 而如果替换成功 则不会有返回值
        • int execv(const charpath,char const argv[]);
          • 参数
            path 仍是路径
            argv 一个数组指针 即命令行指针 与main函数中的argv[]等同
        • int execlp(const charfile, const char arg, …);
          • 参数
            file 指定程序名 操作系统自动在PATH里面找(使用该函数的前提是其存在于PATH中)
        • int execle(const charpath, const char arg,…,char* const envp[])
          envp 自定义环境变量
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值