当前位置: 首页 > 面试题库 >

什么是不间断的过程?

田玉韵
2023-03-14
问题内容

有时,每当我在Linux上编写程序并由于某种错误而崩溃时,它将变成不间断的进程并永远运行,直到我重新启动计算机(即使注销)。我的问题是:

  • 是什么导致流程变得不间断?
  • 我如何阻止这种情况发生?
  • 这可能是一个愚蠢的问题,但是有什么方法可以在不重新启动计算机的情况下中断它?

问题答案:

不间断进程是恰好在系统调用(内核函数)中的进程,无法被信号打断。

要了解这意味着什么,您需要了解可中断系统调用的概念。典型的例子是read()。这是一个系统调用,可能需要很长时间(几秒钟),因为它可能涉及旋转硬盘驱动器或移动磁头。在这段时间的大部分时间内,进程将处于hibernate状态,从而阻塞硬件。

当进程在系统调用中处于睡眠状态时,它可以接收Unix异步信号(例如SIGTERM),然后发生以下情况:

  • 系统调用过早退出,并设置为将-EINTR返回给用户空间。
  • 信号处理程序被执行
  • 如果该进程仍在运行,它将从系统调用中获取返回值,并且可以再次进行相同的调用。

从系统调用中提早返回使得用户空间代码可以响应信号而立即更改其行为。例如,对SIGINT或SIGTERM的反应干净地终止。

另一方面,不允许以这种方式中断某些系统调用。如果系统由于某种原因而导致停顿,则该过程可能会无限期保持这种不可杀灭的状态。

LWN 在7月发表了一篇不错的文章,触及了这个话题。

要回答原始问题:

  • 如何防止这种情况的发生:找出造成您麻烦的驱动程序,然后停止使用或成为内核黑客并对其进行修复。

  • 如何在不重新启动的情况下杀死不间断的进程:以某种方式使系统调用终止。通常,最有效的方法是不拉电源线就拉电源线。您还可以成为内核黑客,并使驱动程序使用TASK_KILLABLE,如LWN文章中所述。



 类似资料:
  • 问题内容: 在寻找一种适当的方法来从解析的HTML中修剪出不间断的空间时,我首先偶然发现了Java的spartan定义,至少对此进行了正确的记录。我想避免显式列出适合修剪的字符,因此我假设在Character类上使用Unicode支持的方法将对我有用。 那就是我发现Character.isWhitespace(char)明确排除不间断空格的时候: 它是Unicode空格字符(,或), 但也不是不间

  • 什么是中断 中断是我们在操作系统上首先实现的功能,因为它是操作系统所有功能的基础。假如没有中断,操作系统在唤起一个用户程序之后,就只能等到用户程序执行完成之后才能继续执行,那操作系统完全无法进行资源调度。 一个比喻 操作系统就像家长,他将孩子(用户程序)送到学校(开始运行)之后便不再管。 但是如果孩子闯了祸,老师(硬件)就找到家长,这便是异常 孩子的作业可能需要家长来签字(系统调用),他就会主动找

  • 本文向大家介绍什么是熔断?什么是服务降级?相关面试题,主要包含被问及什么是熔断?什么是服务降级?时的应答技巧和注意事项,需要的朋友参考一下 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。 服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其

  • 问题内容: 我刚刚在这篇博客文章中遇到了这段代码 什么是“接口断言”? 问题答案: 它将指向具体类型的nil指针分配给接口类型的变量。这是证明具体类型满足接口的一种常见做法- 如果不满足,则该行将无法编译,并给出一个错误,即无法将具体类型分配给该接口类型的变量,以及为什么。 正如@JimB指出的那样,“接口断言”是由作者组成的术语。Go没有这样的术语。具体来说,这是类型转换,先转换为的指针,然后将

  • null 正确的方法是不间断地睡眠。

  • 本文向大家介绍python中的Selenium中的断言是什么?,包括了python中的Selenium中的断言是什么?的使用技巧和注意事项,需要的朋友参考一下 Selenium中有一些断言,它们是测试用例的验证或检查点。在没有断言的情况下,无法选择确定测试用例是否失败。 有时,我们可能会使用条件语句,例如if – else等,然后在控制台中打印pass / fail的结果。但这只能解决检查日志的问