什么是应用程序可以自行终止的最暴力方式(linux)

Dra*_*sha 11 c c++ linux operating-system

我想模仿暴力系统关闭,即尽可能接近应用程序级别的停电.我们在谈论Linux上的c/c ++应用程序.我需要应用程序来终止自己.

目前我看到几个选项:

  1. 呼叫退出()
  2. 调用_exit()
  3. 呼叫中止()
  4. 除零或取消引用NULL.
  5. 其他选择?

什么是最好的选择?

部分重复此问题

lot*_*har 26

最接近电力愤怒的恕我直言是在VM中运行应用程序并在不关闭的情况下为VM供电.在应用程序终止时操作系统仍在运行的所有其他情况下,操作系统将进行一些在实际停电时不会发生的清理.

  • 如果您确实杀死了-9,那么操作系统将毫无疑问地立即杀死VM (4认同)
  • 非常好的主意,它基本上类似于第一个注释中的那个,但没有在实际主机上丢失数据的风险. (3认同)

bdo*_*lan 14

在应用程序级别,你可以得到的最暴力的是_exit().除以零,段错误等都是信号,可以被捕获 - 如果未被捕获,它们基本上与_exit()相同,但可能根据信号留下一个coredump.

如果你真的想要一个硬关机,最好的选择是尽可能以最猛烈的方式切断电源.调用/ sbin/poweroff -fn尽可能接近,尽管它可能会在硬件级别进行一些清理.

但是,如果你真的想要强调一些事情,最好的办法是真正地,真正地削减功率 - 在电源线上安装某种软件控制的继电器,并将软件切断.不受控制的权力丧失将导致各种怪异的东西.例如,由于RAM在DMA控制器或硬盘之前断电,磁盘上的数据可能会损坏.除了实际切断功率之外,在生产硬件配置中,通过多次试验,您无法测试任何其他东西.


Bil*_*nch 11

kill -9
Run Code Online (Sandbox Code Playgroud)

它会终止进程并且不允许任何信号处理程序运行.

  • 要真正模拟电源故障,您需要做得比杀死-9更好,因为这会导致应用程序进程无法死机,但不会阻止操作系统将脏写缓冲区刷新到磁盘.在实际停电时,应用程序可能已完成一些操作系统仍在等待写入磁盘的写入操作.电源耗尽,待处理的写入消失. (12认同)

Cha*_*tin 7

为什么不停下来?还是打电话恐慌?

  • 系统( "/ sbin目录/停止"); 调用void panic(char*); http://lxr.linux.no/linux+v2.6.29/kernel/panic.c#L56 (2认同)

use*_*751 7

尝试

raise(SIGKILL)
Run Code Online (Sandbox Code Playgroud)

在此过程中,或从命令行:

kill -9 pid
Run Code Online (Sandbox Code Playgroud)

其中pid是你的进程的PID(这两个方法是等价的,不应该执行任何清理)


Don*_*eld 5

你不清楚你的要求是什么.如果您正在测试如何从电源故障中恢复,则需要实际导致电源故障.即使像内核恐慌这样的事情也会允许硬盘上的写缓冲区刷新,因为它们独立于CPU.

如果您确实需要测试完整的故障情况,远程电源板可能是一种解决方案.