问题标签 [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.

0 投票
1 回答
1057 浏览

python - Python模块中atexit调用的对象清理序列和函数

我正在使用 boost-python 将旧版 C++ 库与 Python 集成。遗留库有一些全局初始化,然后其中的类使用应用程序范围的数据。我需要确保在销毁所有包装对象后调用遗留库的关闭函数,并认为这可以通过使用 atexit 注册关闭函数来实现。但是,我发现 atexit 调用关闭函数后正在清理包装的对象,导致遗留库中出现多个段错误!

我可以通过在退出之前对包装的对象调用 del 来实现所需的行为,但希望将删除留给 Python。我已经检查了对象文档中的红色警告框。__del__,我想知道我的理想世界是否遥不可及。

在将遗留代码包装在 python 模块中时,确保在清理所有对象后调用关闭方法的任何建议?

一些重要的平台细节:

  • Python 2.7.2
  • 视觉工作室 2013
  • 64 位构建

最小代码:

编译后,可以使用 python 运行,并显示以下输入和输出:

>>> 导入 legacy
legacy::initialize
>>> test = legacy.Test()
>>> ^Z
legacy::shutdown
legacy::Test::~Test

0 投票
1 回答
718 浏览

ruby - Selenium chromedriver 与 at_exit 不兼容

这是我的代码中的错误,还是 Selenium、RSpec 等中的错误?

我正在编写的 Cucumber 测试需要关闭并重新启动 Chrome 驱动程序。但是,我无法让第二个驱动程序正确关闭。下面的精简示例显示了这个问题:(下面的代码是 RSpec 只是因为它演示了这个问题而没有增加 Cucumber 的复杂性。)

当我运行此代码时,我收到以下错误:

at_exit我可以说,当块运行时,第二个 chromedriver 进程不再运行。这会导致问题,因为导致关闭的任何机制都会使 Chrome 窗口保持打开状态。

RSpec 的after(:suite)机制按预期工作。Cucumber 是否有相应的机制(除了at_exit,在这种情况下不起作用)?或者,有没有办法阻止 chomedriver 在at_exit块运行之前退出(所以我可以使用预期的方法将其关闭quit)?

我正在使用最新的 selenium 和 rspec 包在 Mac OS 10.9.5 上运行 Ruby 2.0.0。

0 投票
1 回答
190 浏览

python - atexit 不写入文件

我正在atexit通过尝试打印到文件来测试模块是否正常运行。的实际目的atexit是关闭打开的端口,但这是首先测试是否atexit正常工作。但是,atexit不是打印到文件,有什么想法为什么不呢?任何帮助表示赞赏。

0 投票
1 回答
495 浏览

python - 如何防止 python 在退出时释放 ctypes 回调?

假设我有以下共享库要由ctypes. 它允许您注册要在程序退出或您自己调用它时调用的回调:

然后假设我通过以下魔法加载这个库ctypes

我希望它的输出类似于以下内容:

对我来说不幸的是,它看起来更像这样:

你问这是为什么?好吧,似乎在atexit调用函数时,python 解释器已经释放了之前包含回调的内存:

现在,我的问题。我实际上是在尝试绑定到一个较大的 C 代码库(我无法修改),其中包含在退出时调用的几个回调。当测试程序退出时,这些当前会导致分段错误。是否有可能防止这种情况发生?

0 投票
2 回答
594 浏览

c - 在我的程序中调用 atexit() 是否重要?

基本上,我正在用 SDL 编写程序。

这是代码的一部分:

我的问题如下。考虑到 C 的程序性质,如果(game.window == NULL)是这种情况并return 1执行,会发生什么。程序是否在return 1不调用atexit()该语句之后的函数的情况下终止if

尽管在 -语句之后有函数,程序是否仍然调用SDL_DestroyWindow()and SDL_Quit(),这两个函数都在函数中?atexit()atexit()return 1if (game.window == NULL)

据我了解,C从上到下执行代码,那么atexit()如果return 1之前发生过,它怎么知道最后调用函数呢?

0 投票
1 回答
1765 浏览

c - 实时/非批处理应用程序中的 C 退出代码和 atexit()

我正在编写一个游戏,其中许多不同的条件都可能导致失败,例如图像或着色器无法加载,OpenGL 无法获得有效的上下文等。

在一个理想的世界中,我想以我认为适用于 C 的方式使用退出代码,即非零用于失败条件。但是,有一些因素会影响到这一点:

  • 在使用非零退出代码时,atexit()不调用,不幸的是我的程序清理是通过我喜欢的单个atexit()注册分层处理的。main()
  • 我突然想到,考虑到应用程序的性质 - 与批处理程序不同,游戏具有不确定的运行时间 - 可能永远不会有实际使用退出代码的实际情况。它不像 Makefile 调用的命令行图像转换器,它需要通过其退出代码知道程序是成功还是失败,从而确定是否继续构建。可能性是,如果程序在运行时出现任何问题,例如丢失文件,那是我自己解决的问题,然后顺利进行。

在我的情况下,可以提出和反对使用非零退出代码的哪些论据?

0 投票
4 回答
1366 浏览

python - 无法从 python 2.7 中的 atexit 注销函数

首先,我用flush方法写了一个记录类:

然后,我想在退出时刷新:当手动停止、崩溃或任何原因时。

所以我用:

而且效果很好。

但是现在,我想用不同的缓冲区大小和不同的路径多次录制、停止录制、再次录制。所以我必须丢弃,然后实例化几个Recorder. 它有点工作,但是 oldRecorder的内存(包含一些 fat self._big_buffer̀)没有被释放,因为它被atexit. 即使我明确调用del. 我不能atexit.unregister(self._flush),因为它只是 Python 3。

我不希望重用现有实例,而是丢弃旧实例并创建新实例。

你会如何处理这样的情况?

0 投票
2 回答
1249 浏览

python - sys.exitfunc 在 python 中不起作用

我正在尝试按照简单的代码运行

它打印

我无法理解为什么它不打印“来自测试方法”

虽然使用 atexit 效果很好

输出

0 投票
1 回答
144 浏览

python - 使用python,如何启动一个独立的python进程

我正在制作一个python程序,比如说A。用于监控python脚本B

当 python 程序关闭时,有一个通过 atexit.register() 注册的退出函数,要进行一些清理,它需要重新运行 python 脚本 B,即使 python 脚本 A 已关闭,它也需要保持运行。

Python 脚本 B 不能是 Python 脚本 A 的一部分。

我需要做些什么来实现这一点,我已经尝试了一些方法,比如使用 subprocess.Popen(programBCommand),但这似乎不起作用,因为它会阻止 A 关闭。

我正在使用 Debian 操作系统

0 投票
1 回答
90 浏览

c++ - C++ 在退出时发送电子邮件

我想要做的是在退出我的程序时发送一封电子邮件。我使用atexit();函数来执行此操作,但是......它无法正常工作。

功能是否SendEmail();需要太多时间并且什么都不做?它甚至不打印服务器响应(在使用时它工作正常main();