linux--进程控制2

在进程控制的章节我们讲解了我们的进程创建,这章节对进程控制进行补充,

进程终止

在我们创建一个进程之后我们避免不了我们去终止我们的进程。
终止场景

  • 正常退出,结果符合我们的预期
  • 正常退出,结果不符合我们的预期
  • 异常退出

终止方式

  • main函数直接return
  • 调用exit函数
  • 调用_exit函数
 	   #include <unistd.h>
       void _exit(int status);
       #include <stdlib.h>
       void _Exit(int status);

虽然两个函数都是可以让进程终止的,但是两个函数并不是完全一样的
exit和_exit的区别

  • exit是一个库函数,而_exit是一个系统调用接口函数
  • exit退出之前会刷新缓冲区,做退出的收尾工作,_exit直接退出,并不会刷新缓冲区

函数返回值
两个函数的返回值都是传入参数,用来保存我们的退出原因。

错误码

是一个全局变量,每个系统调用执行完毕之后都会重置errno这个变量,这个全局变量存储的就是当次调用的系统接口调用接口错误编号,当调用出错的时候可以使用perror和strerror函数对出错信息进行打印

进程等待

进程等待其实就是父进程等待子进程退出,避免僵尸进程,在默认的情况下是一个阻塞函数。
阻塞的概念:为了完成一项工作,如果当前条件不具备完成条件,则一直等待,知道最后完成
非阻塞的概念:为了完成一向工作,如果当前不具备完成条件,则立即报错返回

	   #include <sys/types.h>
       #include <sys/wait.h>
       pid_t wait(int *status);
       pid_t waitpid(pid_t pid, int *status, int options);

wait函数是等待任意一个子进程退出则退出
wait_pid默认是可以等待任意一个子进程退出则退出,当时我们可以设置我们的参数,可以回收指定的参数
waitpid
pid:当pid=-1的时候等待任意一个子进程,与wait函数类似,当pid>0的时候我们等待其进程id和pid相等的子进程退出则退出。
options:选择参数

  • WNOHANG :设置waitpid设置为非阻塞函数
  • WUNTRACED
  • WCONTINUED
    status:传入参数,是保存我们退出信息的
    status是一个int型4字节。但是我们的状态只使用了低16为,高八位存储子进程退出返回值,低七位保存了异常退出信号值,第八位是core dump标志(程序异常退出时是否保存运行信息)。
    在这里插入图片描述
  • 获得子进程推出码:(status>>8)&&0xff
  • 判断程序是否正常退出,信号值为0就是正常退出,否则不是正常退出,status&&0x7f,就可以得到我们的信号值。

猜你喜欢

转载自blog.csdn.net/boke_fengwei/article/details/89165815