繁体   English   中英

中止功能如何永不返回?

[英]How does abort function never return?

我在阅读abort()系统调用的手册页,就遇到了这个问题。

返回值

abort()函数从不返回。

我想知道这怎么可能?

调用abort功能导致程序终止。

因此, abort不会返回。

许多C库函数从不返回调用者:

  • exit()终止程序,提供退出状态。

  • abort()使用错误消息终止程序。

  • longjmp()将控制权转移回由相应setjmp()保存的点

汇编代码或者直接跳转到与返回地址不同的地址,或者进行系统调用以终止程序。

“永不返回”的函数必须无条件地执行以下五个操作之一:

  1. 输入无限循环( for(;;);
  2. 执行“非本地控制权转移”,以使其他一些功能似乎返回( longjmpswapcontext
  3. 调用“系统调用”,使操作系统至少终止当前的执行线程( pthread_exit_exitreboot
  4. 执行某种禁止或无效的机器操作(无效指令,对未映射的内存的访问等),再次导致OS终止进程
  5. 调用执行上述操作之一的其他函数。

通常, abort是5-> 3、4和最后一个选择1的某种组合,因为它的合同是发生严重错误之后终止该过程:尝试第一件事并不是没有问题的(通常是kill(getpid(), SIGABRT) )不起作用。

在较低的级别,我们可以讨论什么实际上是“执行线程”,操作系统如何设置它们并将其拆除,以及操作系统本身是如何由引导加载程序调用的程序,以及是否斜视按照正确的方式,“运行程序”只是动态地修改OS的代码以包含该程序的代码,然后跳转到该代码……但是也许您不希望我在Windows 2000中放弃整个操作系统课程。这个答案框。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM