(3.9)进程与线程——获知子进程运行状态改变

2024-06-08 07:18

本文主要是介绍(3.9)进程与线程——获知子进程运行状态改变,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.获知子进程状态的信息改变
    • 2.僵尸进程
    • 3.wait函数
    • 4.解析子进程状态改变信息的宏
    • 5.调用wait函数之后,父进程可能出现的情况
    • 6.等待特定子进程的状态改变
    • 7.waitpid

1.获知子进程状态的信息改变

  • 进程的生命周期随着程序加载到内存当中,而产生进程,进程的状态会有:就绪,等待,暂停
  • 当一个进程发生特定的状态变化(进程终止、暂停以及恢复)时,内核向其父进程发送SIGCHLD信号
  • 父进程可以选择忽略该信号,也可以对信号进行处理(默认处理方式为忽略该信号)
  • 父进程对相应状态,或相应信号的处理,可以通过wait或waitpid函数可以用于等待子进程状
    态信息改变,并获取其状态信息

2.僵尸进程

  • 为什么要关注进程的状态信息,并对其进行善后处理呢? :因为僵尸进程

  • 进程在退出之前会释放进程用户空间的所有资源(包括代码,数据,环境变量,及命令行参数等),但PCB等内核空间资源不会被释放
    (1)释放内核空间资源必须通过:当父进程调用wait或waitpid函数后,内核将根据情况关闭该进程打
    开的所有文件,释放PCB(释放内核空间资源)
    (2)对于已经终止但父进程尚未对其调用wait或waitpid函数的进程(TASK_ZOMBIE状态) , 称为僵尸进程

  • 父子进程之间是独立的,没有关联的

  • 如果父进程在子进程终止之前终止,则子进程的父进程将变为init进程, 保证每个进程都有父进程,由init进程调用wait函数进行善后

3.wait函数

  • 功能:获取任意子进程的状态改变信息(改变状态可以是:暂停及恢复状态,如果是终止状态则对子进程进行善后处理)
  • 函数原型
头文件: sys/wait.h
pid_t wait(int *statloc);参数与返回值
statloc:用于获取子进程的状态改变
返回值:若成功返回状态信息改变子进程ID,出错返回参数statloc
statloc可以为空指针,此时父进程不需要具体了解子进程的状态变化,只是为了防止子进程成为僵尸进程,或者因为同步原因需等待子进程终止
若statloc不是空指针,则内核将子进程状态改变信息存放在它指向的存储空间中
  • 子进程状态改变信息包含了多种类型的信息,可以通过系统提供的宏来快速解析子进程的状态

4.解析子进程状态改变信息的宏

在这里插入图片描述

5.调用wait函数之后,父进程可能出现的情况

  • 如果所有子进程都还在运行(包含:就绪态,运行态和阻塞状态),则父进程被阻塞(TASK_INTERRUPTIBLE状态),直到有一个子进程终止或暂停, wait函数才返回wait函数是一个同步的函数
  • 如果已经有子进程进入终止或暂停状态,则wait函数会立即返回
  • 若进程没有任何子进程,则立即出错返回-1

6.等待特定子进程的状态改变

  • 如果一个进程有几个子进程,那么只要有一个子进程状态改变, wait函数就返回
  • 如何才能使用wait函数等待某个特定子进程的状态改变?
    1 调用wait,然后将其返回的进程ID(说明当前进程的某个子进程的状态发生了改变)和所期望的子进程ID进行比较
    2 如果ID不一致,则保存该ID,并循环调用wait函数,直到等到所期望的子进程ID为止

7.waitpid

(1)功能:等待某个特定子进程状态改变
(2)函数原型

头文件: sys/wait.h
pid_t waitpid(pid_t pid, int *statloc, int options);返回值
成功返回终止子进程ID,失败返回-1参数
pid
pid == -1:等待任意子进程执行终止(同wait)
pid > 0:等待进程ID为pid的子进程执行终止
pid == 0:等待其组ID等于调用进程组ID的任意子进程
pid < -1:等待其组ID等于pid绝对值的任意子进程statloc:存放子进程终止状态options:可以为0,也可以是以下常量或常量的或
WCONTINUED:如果有暂停的进程由于SIGCONT信号的到来而继续运行,则函
数将返回
WUNTRACED:如果有处于终止状态的进程,则函数返回
WNOHANG:如果没有任何已经终止的子进程则马上返回, 函数不等待,此时返回
值为0,设置该标志位可以将waitpid从一个同步的函数变成一个异步的函数

(3)waitpid的特有功能

  • waitpid可等待一个特定的进程的状态改变信息
  • waitpid可以实现非阻塞的等待操作(异步的等待操作),有时希望取得子进程的状态改变信息,但不希望阻塞等待子进程状态改变
  • waitpid支持作业控制(进程组控制)

这篇关于(3.9)进程与线程——获知子进程运行状态改变的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041512

相关文章

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux进程终止的N种方式详解

《Linux进程终止的N种方式详解》进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束,下面小编为大家整理了一些常见的Linux进程终止方式,大家可以根据需求选择... 目录前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A