问题标签 [termination]
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.
python - 如何终止脚本?
我知道die()
PHP 中的命令会提前退出脚本。
我怎样才能在 Python 中做到这一点?
wcf - 在应用程序终止时,WCF 中 IsOneWay=true 的方法会发生什么
我有一个客户端应用程序,它会偶尔通知它的服务进度。对服务的方法调用标记为 IsOneWay=true,因为通知不需要任何返回值,我不想延迟。
客户端可能会向服务通知错误,然后它会终止。
问题是:单向方法调用发送消息后是否返回调用者代码?还是将消息排队,然后由另一个线程发送?
两个进程(客户端和服务)在同一台机器上,我注意到有时(当机器过载时)服务没有收到错误通知。我怀疑我提到的第二种选择会发生,但我不确定。
如果我是对的,我如何确保发送通知并保持方法单向?
c++ - 程序终止时保证文件删除 (C/C++)
Win32CreateFile
有FILE_FLAG_DELETE_ON_CLOSE
,但我在 Linux 上。
我想打开一个临时文件,该文件将在程序终止时被删除。我可以理解,在程序崩溃的情况下,保证这一点可能不切实际,但在任何其他情况下,我希望它能够工作。
我知道RAII。我知道信号。我知道atexit(3)
。我知道我可以打开文件并立即删除它,并且文件将保持可访问状态,直到文件描述符关闭(甚至可以处理崩溃)。这些似乎都不是一个完整而直接的解决方案:
- RAII:去过那里,做到了:我有一个对象,其析构函数会删除文件,但如果程序被信号终止,则不会调用析构函数。
- 信号:我正在编写一个低级库,它使注册信号处理程序成为一个棘手的命题。例如,如果应用程序本身使用信号怎么办?我不想踩到任何脚趾头。我可能会考虑一些巧妙的使用
sigaction(2)
来应对……但还没有对这种可能性进行足够的思考。 atexit(3)
: 显然没用,因为在异常终止期间(例如通过信号)不会调用它。- preemptive
unlink(2)
:这很好,除了我需要文件在文件系统中保持可见(否则系统更难监控/故障排除)。
你会在这里做什么?
进一步说明
我在原来的帖子中省略了一个细节,现在我意识到我应该包括在内。在这种情况下,“文件”并不是严格意义上的普通文件,而是一个 POSIX 消息队列。我通过创建它mq_open()
。它可以通过mq_close()
or关闭close()
(前者是我系统上后者的别名)。可以通过 将其从系统中删除mq_unlink()
。所有这些都使它类似于普通文件,除了我无法选择文件所在的目录。这使得当前最流行的答案(将文件放在 中/tmp
)不可行,因为“文件”是由系统在容量非常有限的虚拟文件系统中创建的。(我已经/dev/mqueue
按照 中的示例安装了虚拟文件系统man mq_overview
)。
这也解释了为什么我需要名称保持可见(使立即取消链接方法不可行):“文件”必须在两个或多个进程之间共享。
c++ - VC++ 6中“for循环”的终止条件是否刷新?
终止条件部分“stlVector.size()”是否考虑了“stlVector.erase(...)”?换句话说,每次循环迭代都会刷新 stlVector.size() 吗?我现在无法测试它,所以我在这里发布了一个问题。
提前谢谢!
最好的祝福,
正补
c# - 在 C# 中清理永久线程的正确方法
我有一个对象,一个时间线,它封装了一个线程。可以在时间线上安排活动;线程将等到执行任何事件的时间,执行它,然后返回睡眠(对于(a)到达下一个事件所需的时间,或者(b)如果没有更多事件,则无限期地)。
睡眠由 WaitEventHandle 处理,当事件列表改变(因为可能需要调整睡眠延迟)或应该停止线程(因此线程可以优雅地终止)时触发。
析构函数调用 Stop(),我什至实现了 IDisposable,Dispose() 也调用了 Stop()。
尽管如此,当我在表单应用程序中使用这个组件时,当我关闭表单时,我的应用程序永远不会正确关闭。出于某种原因,Stop() 永远不会被调用,因此在.NET 决定等待所有线程完成之前,我的对象的析构函数都不会触发,也不会调用 Dispose() 方法。
我想解决方案是我自己在 FormClose 事件上显式调用 Dispose(),但是由于这个类将在一个库中,而且它实际上是更深的一层(也就是说,应用程序开发人员永远不会真正看到时间轴类),这看起来很丑陋,对于应用程序开发人员来说是一个额外的(不必要的)陷阱。我通常在资源释放成为问题时使用的 using() 子句不适用,因为这将是一个长期存在的对象。
一方面,我可以理解 .NET 在进行最后一轮垃圾回收之前会希望等待所有线程完成,但在这种情况下会产生非常笨拙的情况。
如何在不向我的库的使用者添加要求的情况下正确地清理我的线程?换句话说,如何让 .NET 在应用程序退出时通知我的对象,但在它等待所有线程完成之前?
编辑:回应人们说客户端程序可以知道线程是可以的:我恭敬地不同意。
正如我在原始帖子中所说,线程隐藏在另一个对象(动画师)中。我为另一个对象实例化了一个 Animator,并告诉它执行动画,例如“使此灯闪烁 800 毫秒”。
作为 Animator 对象的使用者,我不关心 Animator 如何确保灯光闪烁 800 毫秒。它会启动一个线程吗?我不在乎。它是否创建一个隐藏窗口并使用系统计时器(ew)?我不在乎。它会雇用侏儒来打开和关闭我的灯吗?我不在乎。
而且我特别不想关心如果我创建了一个 Animator,我必须跟踪它并在我的程序退出时调用一个特殊的方法,这与其他所有对象不同。这应该是图书馆实现者的关注点,而不是图书馆消费者的关注点。
编辑:代码实际上足够短,可以显示。我将它包括在内以供参考,没有将事件添加到列表的方法:
java - 处理异常的 Java 程序退出
假设我有一个打开数据库连接的 Java 应用程序。通常我会在 finally 块中添加一个 connection.close() ,但是在 kill 操作或任何其他异常终止的情况下不会执行此块,不是吗?作为程序员,我是否可以采取任何其他预防措施以便在应用程序退出之前正确关闭连接?
.net - 为什么我不应该使用 Process.GetCurrentProcess().Kill() 来退出我的 WinForm 应用程序?
现在,当用户想要退出我的应用程序时,我会做一些我必须做的事情(即从服务器断开连接,保存用户数据......)然后我执行以下操作:
- 使用布尔值退出我的所有主循环
- 中止仍在运行的线程(通常是我的服务器轮询线程)
- 请致电 Application.Exit();
这需要几秒钟才能退出,并且没有任何实际用途(所有内容都已保存在服务器上,所以我并不关心那里发生了什么)
如果我改用它,我会立即终止,没有我能想到的缺点:
为什么我不终止我的进程并让 CLR 删除 AppDomain ?
我知道仔细处理您的共享资源(IO 文件处理程序等)很重要(所以请不要回答这个问题:)),但是一旦完成,是否有真正的理由干净地退出我的应用程序?
windows - 如何使用 Win32 API 获取 (Java) 进程的退出代码?
如何从启动此 JVM 的 Windows 程序中获取 JVM 退出代码(调用中的“状态”值:System.exit(status))?我尝试使用 ShellExecute() 调用的结果,但结果 (42) 与状态的实际值无关。
process - 终止使用 spawnv 创建的进程
我根本没有流程经验,但我设置的应该非常简单。我所做的就是产生一个这样的过程:
现在,我想做的是在一段时间后杀死这个程序。但是,返回的 spawnId 并不是我在调用taskkill /PID [number] /F
.
我已经尝试过使用otherId2 = GetWindowThreadProcessId((HWND)spawnId,OUT otherId1)
但又一次,既没有也没有otherId1
给出otherId2
正确的 PID。
如果有人可以帮助我解决他的问题,我将不胜感激。问候, 罗尔德
c - 检测程序终止(C、Windows)
我有一个程序必须在完成之前执行某些任务。问题是有时程序会因异常而崩溃(例如无法访问数据库等)。现在,有没有办法检测异常终止并在它死之前执行一些代码?
谢谢。
代码表示赞赏。