首页 文章

使用Control C陷阱或中断的进程的突然结束?

提问于
浏览
1

似乎difference between a trap and an interrupt是清楚的:陷阱是对内核的软件调用调用(例如通过异常),并且中断与硬件(磁盘,I / O和外围设备,如鼠标和键盘...)(了解有关the difference here的更多信息) .

知道这一点,在什么类别下按控制C来结束一个过程?它是一个软件调用的调用,因此它是陷阱,因为它可以从Shell等执行,或者它是一个中断,因为它是CPU从键盘接收的信号?或者是完全在用户域之外的中断,这意味着硬件与CPU交互的程度是用户无法达到的水平?

谢谢!

4 回答

  • 3

    陷阱和中断之间的区别不是您在问题中所描述的(感谢参考),而是产生它的事件的异步性质 . 陷阱意味着代码执行中的中断是由于通常不正确/内部操作(如除以零或页面错误,或者您发出信号,软件中断),但它始终位于代码中的同一位置(同步)由于外部硬件的原因,当一些设备发出信号通知cpu中断它正在做什么时,因为它准备好发送一些数据 . 从本质上讲,陷阱是同步的,而中断则不是 .

    这说,两者都是异常事件,改变了cpu的正常执行过程 . 两者都是 hardware 产生的,但出于不同的原因:第一个同步发生(你总是知道何时,在哪个指令中,它将被产生,如果产生的话)和第二个不是(你事先不知道哪个指令将是当外部硬件断言中断线时执行)此外,有两种陷阱(取决于触发它们的事件),一种将指令指针指向下一条指令(例如除以零陷阱)以执行,另一个指向导致陷阱的相同指令(例如页面错误,一旦陷阱的原因得到纠正就必须重新执行)当然,软件中断,就其本质而言,总是陷阱(总是改变执行过程的陷阱)因为可以预测程序流中cpu将被中断的确切点 .

    所以,通过这个解释,你可能可以回答你的问题, Ctrl-C 中断是一个中断,因为你不能提前预测它会中断cpu执行而你无法在代码中标记这一点 .

    请记住,中断是异步的,陷阱不是 .

  • 3

    它首先是 signal - 按下Control-C会使内核向当前前台进程发送信号(SIGINT类型) . 如果该进程尚未为该信号设置处理程序(使用来自 signal() 系列的系统调用之一),则会导致进程被终止 .

    我想这个信号是“中断”信号,但这与硬件中断无关 . 这些仅由内核在内部使用 .

  • 2

    在Linux系统上按 Ctrl+C 用于使用信号 SIGINT 终止进程,并且可以被程序拦截,以便它可以在退出之前清除自身,或者根本不退出 .

    如果它是一个陷阱,它会立即死亡!

    因此,它是一种软件中断!

  • 0

    Control-C不是中断......至少不是PC(现在是MAC)硬件 . 换句话说,键盘控制器不会为组合键“control”和“C”产生特定的中断 .

    键盘仅使用一个中断向量,该向量在按键向下和按键上触发 . 键盘是一个非常慢的硬件设备 . 将密钥重复率设置为最快,按住一个键每秒产生33个中断 .

    如果操作系统的设计者认为控制-C非常重要,他们可能会包括测试“这是关键的”C“AND是”控制“键触发键盘中断数十亿机器周期前?然后,在处理键盘中断时,它们会使用软件中断指令生成陷阱 .

    更好的操作系统会将键盘中断的处理时间缩短到最低限度 . 它们只是附加到循环缓冲区(环形缓冲区)的密钥代码其中包括按下/释放位并立即终止中断 .

    然后,只要有时间,操作系统就会注意到环形缓冲区指针的变化 . 它将触发从环形缓冲区中提取密钥代码的代码,验证该代码是否代表“ctrl-C”组合并设置检测到“ctrl-C”的标志 .

    最后,当调度程序准备好运行属于当前进程的线程时,它检查标志“ctrl-C”被检测到 . 如果是这种情况,调度程序将PC设置为指向SIGINT例程而不是恢复到先前的执行地址 .

    无论细节如何,“ctrl-C”都不能成为中断 . 如果从键盘中断调用它或者它是由调度程序异步测试的同步对象,则它是一个陷阱 .

相关问题