Operating system 如何终止无限运行的进程

Operating system 如何终止无限运行的进程,operating-system,Operating System,这个问题是在NVIDIA采访中问我的 Q) 如果一个进程在无限时间内运行,而O.S.完全失去了对它的控制,那么您将如何从该进程中释放资源 这是一个非常开放的问题,答案取决于很多因素,如操作系统的信号机制、fork wait exit的实现、进程可以运行的状态……等等。你的答案应该在下面几行 进程可以处于以下状态之一:就绪、正在运行、正在等待。。除此之外,还有出生状态和终止/僵尸状态。在其生命周期内,即fork()之后到exit(),进程控制着系统资源。例如:进程表中的条目、打开到IO设备的文件、

这个问题是在NVIDIA采访中问我的


Q) 如果一个进程在无限时间内运行,而O.S.完全失去了对它的控制,那么您将如何从该进程中释放资源

这是一个非常开放的问题,答案取决于很多因素,如操作系统的信号机制、fork wait exit的实现、进程可以运行的状态……等等。你的答案应该在下面几行

进程可以处于以下状态之一:就绪、正在运行、正在等待。。除此之外,还有出生状态和终止/僵尸状态。在其生命周期内,即fork()之后到exit(),进程控制着系统资源。例如:进程表中的条目、打开到IO设备的文件、分配的VM、页表中的映射等

操作系统已完全失去对进程的控制:我解释如下--

-----进程可以执行系统调用exread,操作系统会将进程置于休眠/等待状态。有两种睡眠:可中断和不可中断 读取完成后,硬件向操作系统发送一个信号,该信号将被重定向到休眠进程。这一进程将再次启动。也可能存在读取从未完成,因此硬件从未发送信号的情况

假设进程启动了读取(将失败)并转到:

可中断睡眠:现在,此进程的操作系统/父进程可以向此进程发送SIGSTOP、SIGKILL等,它将从睡眠中中断,然后操作系统可以停止进程并回收所有资源。这很好,解决了无限资源控制的问题

b不间断睡眠:现在,即使读取未发送任何信号,但需要无限时间,并且父/OS知道读取失败,可能发送SIGSTOP,SIGKILL无效,因为它正在不间断地睡眠,等待读取完成。因此,现在进程控制了系统资源,操作系统无法收回它。有关UniterRuntable SLEEP的详细信息,请参阅。因此,如果一个进程在无限时间内处于这种状态,操作系统或父进程无法杀死/停止它并回收资源,这些资源将无限期地绑定,只有在系统关机时才能回收,或者,您需要在服务被触发的地方攻击驱动程序,让驱动程序终止服务,然后驱动程序将读取失败信号发送到不间断进程

----在进程完成执行并准备就绪后,创建此进程的父进程尚未调用此子进程上的等待,并且进程处于僵死状态,在这种情况下,它仍然挂起一些系统资源。通常,父级的工作是确保它创建的子级正常终止。但是,在这种情况下,应该调用wait的父进程本身可能会被杀死,然后终止这个子进程的责任就转移到了操作系统上,这正是init进程在类似UNIX的操作系统上所做的。除了其他工作之外,init还扮演着一个养父的角色,在这个过程中,谁的父母死了。它时不时地(当系统资源不足时)运行check_ZOMBIE过程,以确保ZOMBIE不会占用系统资源

从:当一个进程失去它的父进程时,init将成为它的新父进程。Init定期执行wait系统调用,以获取以Init为父级的任何僵尸。init的职责之一是收成孤儿和无父母的僵尸

因此,您的答案应该指向进程状态的定义方式、信号处理机制的实现方式以及init进程获取僵尸的方式等等

希望它能澄清一两件事


干杯……

你自己的答案是什么?@macmake我通过任何硬件中断或重启系统说。但我不知道这些答案是否正确。操作系统完全失去对流程的控制意味着什么?@ArlieStephens这意味着操作系统无法从该流程中释放资源。你的面试官有什么线索吗?