C++ C+中的exec*()+;,我们通常的出口担保会发生什么变化?
我们面临一项任务,需要C++ C+中的exec*()+;,我们通常的出口担保会发生什么变化?,c++,exec,raii,C++,Exec,Raii,我们面临一项任务,需要exec另一个可执行文件来替换当前进程映像 但是很难找到关于C++和运行时交互的文档。特别是,我们幸运地认为理所当然的任何保证是否仍然有效 调用析构函数展开堆栈(用于自动、线程本地和静态变量) 调用std::atexit()回调 给定:“…是execve的前端…”和“…execve()在成功时不会返回,并且调用进程的文本、数据、bss和堆栈被加载的程序的文本、数据、bss和堆栈覆盖…”(来源:)。我认为您根本没有任何保证。exec*使用不同的进程替换该进程,并且不会返回。
exec
另一个可执行文件来替换当前进程映像
<>但是很难找到关于C++和运行时交互的文档。特别是,我们幸运地认为理所当然的任何保证是否仍然有效
- 调用析构函数展开堆栈(用于自动、线程本地和静态变量)
- 调用
回调std::atexit()
exec*
使用不同的进程替换该进程,并且不会返回。如果调用成功,“旧”进程将消失而不留痕迹。成功后,不会展开堆栈,因为堆栈已消失。没有调用std::atexit()
,因为进程没有退出。谢谢大家,我想所有这些都可以成为答案!给定:“…是execve的前端…”和“…execve()在成功时不会返回,并且调用进程的文本、数据、bss和堆栈被加载的程序的文本、数据、bss和堆栈覆盖…”(源:)。我认为您根本没有任何保证。exec*
使用不同的进程替换该进程,并且不会返回。如果调用成功,“旧”进程将消失而不留痕迹。成功后,不会展开堆栈,因为堆栈已消失。没有调用std::atexit()
,因为进程没有退出。谢谢大家,我想所有这些都可以成为答案!