zoukankan      html  css  js  c++  java
  • 【操作系统原理】【实验3】观察进程状态

    一、实验目的

    设计性|通过Linux下进程的状态理解进程的各种状态,以及状态的转换理解进程的创建、阻塞、撤销等进程控制。

    二、实验步骤

    step1:通过实例查看状态为“运行”的进程
    step2:通过实例查看状态为“暂停”的进程
    step3:通过实例查看状态为“不可中断阻塞”的进程
    step4:通过实例查看状态为“可中断阻塞”的进程
    step5:通过实例查看状态为“僵尸”的进程

    三、实验内容

    3.1 通过实例查看状态为“运行/暂停”的进程

    编译运行如下文件run_status.c

    int main()
    {
        int i, j;
        for (i = 1; i <= 1000000; i++)
        {   
            for (j = 1; j <= 1000000; j++)
            {
                j++;
                j--;
            }
        }   
        return 0;
    }
    

    在终端中查看进程并匹配到上述程序。

    我们发现此进程的状态为R。

    我们发送停止信号-SIGSTOP给该进程。

    我们再次查看该程序的状态码,发现其变为T,此时发送运行信号-SIGCONT给该进程后又变为R。

    3.2 通过实例查看状态为“可中断”的进程

    编译运行interruptible_status.c文件。

    int main()
    {
        sleep(300);
        return 0;
    }
    

    我们发现该进程的状态为S。

    我们使用Kill命令终止该进程。

    再次查看发现其进程已经不存在。

    3.3 通过实例查看状态为“不可中断阻塞”的进程

    编译运行uninter_status.c文件。

    #include <stdlib.h>
    int main()
    {
        if (vfork() == 0)
        {   
            sleep(300);
            exit(0);
        }   
        return 0;
    }
    

    我们发现该进程的状态码为D。

    (centos6.3环境下)我们使用kill命令之后发现其依然存在。
    【注意】下图实验结果非本次预期实验结果。

    3.4 通过实例查看状态为“僵尸”的进程

    编译运行zombie_status.c文件。

    #include <unistd.h>
    int main()
    {
        if (fork())
        {   
            sleep(300);
        }   
        return 0;
    }
    
    

    我们发现其进程状态码为S。

    4、实验报告

    4.1 实验结果

    1、我们运行一个程序使程序陷入for循环中,此时我们查看进程的状态为R(TASK_RUNNING)可运行状态。
    若此处给该进程发送停止信号-SIGSTOP则其状态变为T,再发送-SIGCONT信号其状态又变为R。
    2、我们运行一个程序使其陷入睡眠,此时查看该进程的状态为S(TASK_INTERRUPTIBLE)可中断等待状态。
    若此处我们给该进程发送停止信号,则该进程被终止。
    3、我们运行一个程序使其陷入子进程的睡眠中,此时查看该进程的状态为(TASK_UNINTERRUPTIBLE)不可中断等待状态。
    若此时我们给该进程发送停止信号,该进程并没有被终止(centos7环境下终止了)。
    4、我们运行一个程序,使其子进程迅速结束,而父进程进入阻塞。此时该子进程的状态码为Z(TASK_ZOMBIE)僵死状态。

    4.2 实验总结

    1、正在运行或在可运行进程队列中等待运行的进程处于TASK_RUNNING(可运行状态),
    我们发送给该进程暂停信号后,该进程将进入暂停状态,其可接受运行信号继续运行。
    2、在等待资源的进程将被阻塞,进入TASK_INTERRUPTIBLE(可中断等待状态),其可以被停止信号终止,
    也可以在等待的资源有效时被信号唤醒。
    3、处于不可被中断状态的进程不可被其他进程唤醒,也不可被信号终止,只能等待硬件状态。
    4、子进程迅速终止而父进程阻塞时,子进程将进入僵死状态,直至父进程退出,其资源也被一并回收。

    有了计划记得推动,不要原地踏步。
  • 相关阅读:
    python3 解决tcp黏包方法一
    python3 udp不黏包但丢数据
    python3 类的单例模式
    python3 day07 练习题
    python3 tcp黏包情况二
    python3 tcp黏包情况一
    python3 subprocess模块
    python3 UDP协议下的socket
    python3 TCP协议下的socket
    python3 socket网络通信的整个流程
  • 原文地址:https://www.cnblogs.com/amnotgcs/p/15523533.html
Copyright © 2011-2022 走看看