码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • c++ ,python监控 进程 状态 fork


    【精选】操作系统实验二 观察Linux进程状态_linux什 么时候出现运行状态、暂停状态、可中断阻塞状 态、不可中断阻塞状态、僵_Ace2NoU的博客-CSDN博客

    Linux C/C++ 监控进程变化_mob649e81583204的技术博客_51CTO博客

    1. #include <sys/types.h>
    2. #include <sys/wait.h>
    3. pid_t pid;
    4. int status;
    5. pid_t child_pid = fork();
    6. if (child_pid < 0) {
    7. // 创建子进程失败,错误处理
    8. } else if (child_pid == 0) {
    9. // 子进程代码
    10. // 子进程结束后使用 exit() 函数退出
    11. exit(0);
    12. } else {
    13. // 父进程代码
    14. while ((pid = waitpid(child_pid, &status, WNOHANG | WUNTRACED | WCONTINUED)) > 0) {
    15. if (WIFEXITED(status)) {
    16. // 子进程正常退出,可以进行相应处理
    17. } else if (WIFSIGNALED(status)) {
    18. // 子进程被信号终止,可以进行相应处理
    19. } else if (WIFSTOPPED(status)) {
    20. // 子进程被暂停,可以进行相应处理
    21. } else if (WIFCONTINUED(status)) {
    22. // 子进程被恢复继续执行,可以进行相应处理
    23. }
    24. }
    25. if (pid < 0) {
    26. // 监控子进程出错,错误处理
    27. }
    28. }

    分析为什么出现以上现象,并对其进行总结:什么时候出现运行状态、暂停状态、可中断阻塞状态、不可中断阻塞状态、僵尸状态?

    1、在查看运行状态的实验中,该进程在0:51时获得CPU正在运行,处于R状态。在查看暂停状态时,进程一开始处于R状态,由于向其发送了SIGSTOP信号,所以转为T状态,后来又向其发送了SIGSCON信号,进程又转为R状态。在查看可中断阻塞状态时,进程一开始处于S状态,由于使用了kill命令,进程被中断。在查看不可中断阻塞状态时,进程一开始处于D状态,使用了kill命令,但进程并没有被中断。在查看僵尸进程时,子进程迅速结束,进入Z状态,而父进程陷入阻塞,进入S状态。

    2、出现各种状态的情况:

    (1)可运行状态R:当创建一个新进程,系统调用创建原语,该进程为就绪状态,或者进程执行唤醒原语,把处于阻塞状态进程的状态改为就绪状态,或者进程获得CPU正在运行,处于执行状态。

    (2)可中断阻塞状态S:进程调用阻塞原语把状态改为阻塞状态,在资源有效时,能被信号或中断唤醒进入到运行态队列。  可以kill

    (3)不可中断阻塞状态D:进程调用阻塞原语把状态改为阻塞状态,不可被其他进程唤醒,只有被使用wake_up()函数明确唤醒时才能转换到可运行的就绪状态。  不可以kill

    (4)暂停状态T:当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号,让进程转换到可运行状态。

    (5)僵死状态Z:表示进程停止但尚未消亡的一种状态。此时进程已经结束运行并释放掉大部分资源,但父进程尚未收回其PCB。
     

    python代码

    1. import psutil
    2. def check_process_status(pid):
    3. try:
    4. process = psutil.Process(pid)
    5. status = process.status()
    6. if status == psutil.STATUS_RUNNING:
    7. return "Running"
    8. elif status == psutil.STATUS_SLEEPING:
    9. return "Sleeping"
    10. elif status == psutil.STATUS_ZOMBIE:
    11. return "Zombie"
    12. elif status == psutil.STATUS_DEAD:
    13. return "Dead"
    14. elif status == psutil.STATUS_IDLE:
    15. return "Idle"
    16. else:
    17. return "Unknown"
    18. except psutil.NoSuchProcess:
    19. return "Process not found"
    20. # 使用进程的PID来检查其状态
    21. pid = 1234 # 替换为你要检查的进程的PID
    22. status = check_process_status(pid)
    23. print(f"Process status: {status}")

  • 相关阅读:
    多测师肖sir_高级金牌讲师_python之结构语句005
    上周热点回顾(12.25-12.31)
    linu入门9—操作系统正则符号
    基于python的大数据反电信诈骗管理系统的设计与实现
    Spring/SpringBoot自定义线程池
    在WPF应用中,结合阿里矢量图标库使用Geometry图标
    DataX 自学使用
    华为云云耀云服务器L实例评测|轻量级应用服务器对决:基于 fio 深度测评华为云云耀云服务器L实例的磁盘性能
    PCI Pharma Services宣布斥资数百万美元扩建英国制造设施,以满足市场对支持肿瘤治疗的全球高效药制造服务日益增长的需求
    Halcon中涉及的数字图像十大理论知识
  • 原文地址:https://blog.csdn.net/sun007700/article/details/134540467
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号