Windows(或Linux)中的不间断进程?

有没有办法让程序无法中断(一个不间断的程序)? 通过这种方式,我的意思a process that can't be terminated by any signal, kill command, or any other key combinations任何系统中a process that can't be terminated by any signal, kill command, or any other key combinations :Linux,Windows等。

首先,我有兴趣知道它是否可能。 如果是,那么可能的范围是什么?

我主要用C,C ++和python编写代码; 但我不知道这些编程语言中有任何这样的命令。

是否可以使用汇编语言,以及如何使用? 或者使用嵌入式汇编代码(内联汇编)的高级语言c?

我知道有些信号可以捕获,有些信号不像SIGKILL和SIGSTOP。

我记得,当我习惯使用Windows-XP时, some viruses couldn't be terminated even from Task Manager. 所以我想在低级语言中可能有一些解决方案。 也许通过重写中断向量表。

我们可以使用TSR(挂钩)编写一个不间断的程序吗? 因为TSR只能在重新启动计算机时或者从内存中明确删除TSR时删除。 我对么?

我在Google上找不到任何东西。

那么,可能有人可以编写一个对大多数信号没有响应的程序,如SIGQUIT,SIGHUP等。 – 每种“kill”实际上是一种由内核发送到程序的信号,一些信号意味着内核程序是陷入困境,应该被杀死。 实际上唯一不可杀死的程序是内核本身,甚至init(PID 1)也可以用HUP“杀死”(这意味着重新加载)。

了解有关信号处理的更多信息,从kill -l(列表信号)命令开始。

关于Windows(基于“防病毒”标签) – 实际上也适用于linux – 如果你只是需要运行一些防病毒用户无法跳过/关闭,它的权限问题,我的意思是程序由系统启动,而非管理用户未经许可杀死它,无论如何都无法关闭/退出它。 我想全世界Windows上的lameusers会先尝试关闭防病毒软件,然后开始“解决”他们遇到的任何问题,就好像它是可能的:)

在Linux上,可以避免被以下两种方式中的一种杀死:

  1. 成为init (PID 1)。 init忽略了它没有捕获的所有信号,即使是通常不可阻塞的信号,如SIGSTOPSIGKILL
  2. 触发内核错误,让你的程序陷入D (不间断等待)状态。

对于2. ,最终处于D状态的一种常见方法是尝试访问某些未响应的硬件。 特别是在旧版本的Linux上,该过程将陷入内核模式,并且在内核放弃硬件之前不会响应任何信号(这可能需要相当长的时间!)。 当然,你的程序在这样的情况下不能做任何其他事情,所以它比有用更麻烦,并且更新版本的Linux开始通过将D状态划分为可填充状态( SIGKILL工作的地方)来解决这个问题unkillable状态(所有信号被阻止)。

或者,当然,您可以简单地将代码加载为内核模块。 内核模块不能被“杀死”,只能卸载 – 并且只有在它们允许自己卸载的情况下。

你可以捕捉到任何信号或输入,并通过它保持活力,主要的例外是SIGKILL。 可以防止它杀死你,但你必须替换init(并重新启动成为新的init)。 PID 0在大多数Unix上都是特殊的,因为它是唯一不能被杀死的东西。