4
Segmentation Fault在后台如何工作?
除了“ CPU的MMU发送信号”和“内核将其定向到有问题的程序,终止它”之外,我似乎找不到任何其他信息。 我以为它可能会将信号发送到外壳,外壳通过终止有问题的进程和打印来处理它"Segmentation fault"。因此,我通过编写一个极小的shell (称为crsh(废话外壳))测试了该假设。该外壳程序不执行任何操作,只是接受用户输入并将其输入给system()方法。 #include <stdio.h> #include <stdlib.h> int main(){ char cmdbuf[1000]; while (1){ printf("Crap Shell> "); fgets(cmdbuf, 1000, stdin); system(cmdbuf); } } 因此,我在一个裸终端(没有bash在下面运行)中运行了这个shell 。然后,我继续运行一个产生段错误的程序。如果我的假设正确,则可能是a)崩溃crsh,关闭xterm,b)不打印"Segmentation fault"或c)两者。 braden@system ~/code/crsh/ $ xterm -e ./crsh Crap Shell> ./segfault Segmentation fault Crap Shell> [still running] 回到正方形,我猜。我刚刚演示了执行此操作的不是外壳程序,而是其下的系统。甚至如何打印“细分故障”?“谁”在做?内核?还有吗 信号及其所有副作用如何从硬件传播到程序的最终终止?