问题标签 [atexit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在 C 中进行清理的另一种方法?
考虑这个程序:
然而,这是一种幼稚的方法,因为malloc
可能会失败并且指针不是free
'd。
所以你可以这样做:
但是我认为这很容易出错。考虑必须分配 20 个指针,在最后一个malloc
错误情况下,您必须分配free
19 个变量,然后return -1
.
我也知道atexit
,这可以帮助我这样写:
哪个更好,但我不喜欢必须将所有指针声明为全局指针。有没有办法将这两种方法结合起来,基本上:
- 具有指针的析构函数,可以直接执行或与
atexit
. - 具有指向函数的本地指针。
multithreading - atexit 是否等待其他线程死亡?
用 atexit() 注册的函数是最后执行的函数吗?是否可能此时其他线程仍在运行?
python-3.x - 使用 Flask 开发服务器重新加载器处理多个应用程序对象的 atexit
这是另一个烧瓶开发服务器重新加载器问题。有一百万个问题问为什么它会两次加载所有内容,而这不是其中之一。我知道它会加载所有内容两次,我的问题涉及处理这个现实,我还没有找到我认为解决我正在尝试做的事情的答案。
我的问题是,如何在退出时清理所有应用程序对象?
我目前的方法如下所示。在此示例中,我使用 atexit 函数运行我的清理代码。
这段代码的输出如下:
请注意,首次加载时,会创建一个 ID 为 '864 的应用程序对象。在自动重新加载期间,会创建一个 ID 为 '312 的新应用程序对象。然后,当我按下 Ctrl-C(最后一行)时,将调用 atexit 例程,原始的 '864 app 对象是可以使用 app 变量访问的对象,而不是较新的 '312 app 对象。
我希望能够在服务器关闭或 Ctrl-C 时(在本例中为 '864 和 '312)对浮动的所有应用程序对象进行清理。关于如何做到这一点的任何建议?
或者,如果我可以在重新加载后创建的较新的 '312 对象上运行清理,我也可以完成这项工作 - 但是我目前的方法只能让我清理原始应用程序对象。
谢谢。
UPDATE1:我发现了一个链接,建议使用 try/finally 而不是 atexit 挂钩来完成我上面打算做的事情。切换到此会导致与 atexit 完全相同的行为,因此对我的问题没有帮助:
python - 在 atexit 回调中设置退出代码
有没有办法在atexit
模块中注册并在退出时调用的函数中设置退出代码?调用会sys.exit(code)
产生错误,并且不会将退出代码设置为所需的值。
的内容atexit_test.py
:
python-3.x - Python3 仅在主进程上运行 atexit
我有一个生成多个子进程的程序,如何让程序只在主进程上调用 atexit.register(function) 而不是在子进程上调用?
谢谢
c - MinGW 交叉编译的应用程序,atexit / mingw_onexit 在 Windows 10 上崩溃
我有一个从 Fedora Linux 为 Windows 交叉编译的 C 应用程序:
该应用程序用于atexit
注册拆卸例程:
https://github.com/jdolan/Objectively/blob/master/Sources/Objectively/Class.c#L74
在某些Windows 系统上,注册atexit
处理程序会导致崩溃:
这个特定的系统是全新安装的 Windows 10。我尝试以管理员身份运行该应用程序,结果相同。
msvcrt
我应该提供不同的版本吗?有点难住了这里。
c - POSIX 标准对 atexit() 处理程序中的线程堆栈有何规定?操作系统的做法是什么?
当我们的 UNIX/C 程序需要紧急退出时,我们使用 exit (3) 函数并安装 atexit (3) 处理程序以进行紧急清理。这种方法运行良好,直到我们的应用程序被线程化,此时 atexit() 处理程序停止以可预测的方式工作。
我们通过试验了解到一个错误,线程可能已经在 atexit() 处理程序中死亡,并且它们的堆栈被释放。
我没有在使用 atexit() 的标准链接线程消失中找到引用:从 main() 返回后线程不再存在,但它是在调用 atexit() 之前还是之后?Linux、FreeBSD 和 Mac 上的实际做法是什么?
在多线程程序中是否有一个很好的紧急清理模式?
python - 当 python 进程被杀死时运行 atexit()
我有一个在后台运行的 python 进程,我希望它仅在脚本终止时生成一些输出。
调用引发KeyboardInterupt
异常并正确sys.exit()
调用handle_exit()
,但如果我kill {PID}
要从终端执行它会终止脚本而不调用 handle_exit()。
有没有办法终止在后台运行的进程,并且在终止之前仍然运行它handle_exit()
?
c - C extern clock_t 变量在文件中未按预期工作;
所以我有3个文件;main.c , 文件.c 文件.h
在 file.h 我声明了 3 个变量
在file.c中我写了一个函数来保存主运行程序的时间长度;在 file.h 中,我将其称为“void saveLog(void);”
在 main 开头的 main.c 中,我写了 start_t = clock(); 最后写道atexit(savelog)
,我包含了所有库(所有文件中的 time.h 、 stdlib.h 、 stdio.h )
编译时出现错误 apple linker id error
顺便说一句,我的想法是,开始计算时钟和 main 的开始,并简单地在函数中进行数学运算。我的问题是,为什么它不起作用?我还应该如何使用clock_t
变量?我尝试使用 int 进行一些测试,并且似乎可以很好地引用。
python - 在 Spyder IDE 上不调用 Python atexit 函数
我正在开发 Spyder IDE,版本 3.0.0。我的 python 版本是 2.7.12。出于某种原因,atexit 机制在这个特定的 IDE 上不起作用。
代码
结果
当我在 PyCharm 或 Windows cmd 中运行脚本时,它会打印:
当我从 Spyder 运行它时,没有调用 done 函数,也没有打印 2。最终结果是:
有人知道为什么会这样,我该如何解决?
谢谢!