C 中止函数如何永不返回?
我在阅读C 中止函数如何永不返回?,c,linux,C,Linux,我在阅读abort()系统调用的手册页时遇到了这个问题 返回值 abort()函数永远不会返回 我想知道这是怎么可能的?调用abort函数会导致程序终止 因此,abort不会返回。调用abort函数会导致程序终止 因此,abort不会返回。许多C库函数永远不会返回到它们的调用者: exit()终止程序,提供退出状态 abort()以错误消息终止程序 longjmp()将控制权转移回相应的setjmp()保存的点。 汇编代码要么直接分支到与返回地址不同的地址,要么进行终止程序的系统调用。许多C
abort()
系统调用的手册页时遇到了这个问题
返回值
abort()
函数永远不会返回
我想知道这是怎么可能的?调用
abort
函数会导致程序终止
因此,
abort
不会返回。调用abort
函数会导致程序终止
因此,
abort
不会返回。许多C库函数永远不会返回到它们的调用者:
终止程序,提供退出状态exit()
以错误消息终止程序abort()
将控制权转移回相应的longjmp()
setjmp()保存的点。
汇编代码要么直接分支到与返回地址不同的地址,要么进行终止程序的系统调用。许多C库函数从未返回到它们的调用者:
终止程序,提供退出状态exit()
以错误消息终止程序abort()
将控制权转移回相应的longjmp()
setjmp()保存的点。
)
longjmp
,swapcontext
)pthread\u exit
,\u exit
,重新启动
)abort
通常是5->3,4和作为最后手段1的组合,因为它的合同是在事情已经严重出错后终止进程:它尝试的第一件事(通常是kill(getpid(),SIGABRT)
)不可能起作用
在较低的层次上,我们可以讨论“执行线程”实际上是什么,操作系统如何设置和删除它们,操作系统本身是如何由引导加载程序调用的程序,如果你以正确的方式看它,“运行程序”只是动态修改操作系统的代码以包含程序的代码,然后跳转到它。。。但是,也许你不想让我在这个答案框中罗列整个操作系统课程。一个“永不返回”的函数必须无条件地完成以下五件事之一:
)
longjmp
,swapcontext
)pthread\u exit
,\u exit
,重新启动
)abort
通常是5->3,4和作为最后手段1的组合,因为它的合同是在事情已经严重出错后终止进程:它尝试的第一件事(通常是kill(getpid(),SIGABRT)
)不可能起作用
在较低的层次上,我们可以讨论“执行线程”实际上是什么,操作系统如何设置和删除它们,操作系统本身是如何由引导加载程序调用的程序,如果你以正确的方式看它,“运行程序”只是动态修改操作系统的代码以包含程序的代码,然后跳转到它。。。但也许你不想让我在这个答题箱里罗列整个操作系统课程。操作系统魔术
abort
将控制权交给操作系统,操作系统会终止进程,因为它会关闭程序。有什么可以返回的呢?exit()
函数也不会返回(如果您熟悉C99和C11标准,也不会返回\u exit()
或quick\u exit()
)abort
将控制权交给操作系统,操作系统会终止进程,因为它会关闭程序。有什么可以返回的呢?exit()
函数也不会返回(如果您熟悉C99和C11标准,也不会从POSIX返回\u exit()
或quick\u exit()
)。