golang 没有办法监听到 程序退出事件啊(通过任务管理器,选择"结束任务",关闭)

2019-05-03 22:14:10 +08:00
 jicg

windows 下 通过任务管理器,选择"结束任务",关闭程序。golang 有没有什么办法监听到关闭事件。os.Signal 对由任务管理器关闭无效。

5386 次点击
所在节点    Go 编程语言
15 条回复
chenset
2019-05-03 22:17:57 +08:00
window 任务管理器这个以前查过, golang 层好像的确监听不到.
chenset
2019-05-03 22:20:00 +08:00
但是 windows 下的 IDE 的 run & stop 是支持的 os.Signal 的
chenset
2019-05-03 22:21:34 +08:00
所以要实现监听可以试试用命令行的 taskkill
ysc3839
2019-05-03 22:39:49 +08:00
Windows 没有 Unix 的 signal 机制,所以实现不了的。
geelaw
2019-05-03 23:16:44 +08:00
CLI: 用 SetConsoleCtrlHandler 处理 CTRL_CLOSE_EVENT
GUI: 在 WdProc 里处理 WM_CLOSE
lusi1990
2019-05-03 23:56:51 +08:00
go,not golang
404neko
2019-05-04 00:36:37 +08:00
.Net 可以用 WaitForExit 达到监听的目的 前提是进程是你的进程打开的
KasuganoSoras
2019-05-04 00:58:00 +08:00
程序启动时顺带启动一个 cmd 脚本,脚本里面循环检测进程是否存在,如果不存在就执行 xxx
DefoliationM
2019-05-04 01:14:39 +08:00
tasklist 抓一下
zwh2698
2019-05-04 01:41:50 +08:00
看了楼上回答的,没有一个满意的。监听进程如果你创建的,你可以 wait ,不是你创建的,你要打开进程句柄 wait, 是不是很烦。 所以进程管理的 queryprocessinfo 这个 API,你也可以用,这样就解决了。
xuanbg
2019-05-04 08:24:31 +08:00
任何程序都可以通过系统 API 监听进程运行状态,但都不能监听到自身的异常退出。因为在此之前,你就异常退出了呀。所以,自己另外起一个守护进程监听就好了嘛。
Qzier
2019-05-04 09:13:17 +08:00
python 可以监听,go 不清楚。
jicg
2019-05-04 10:19:38 +08:00
主进程用 golang 写的。调用 winform 开发的 gui 程序。在任务管理器里面关闭 golang 程序的话,winform 程序还是在跑着。如果关闭 winform 程序,golang 能监听到,程序能正常退出
kaneg
2019-05-04 12:49:25 +08:00
通过这种方式关闭进程和在 Linux 下用 kill -9 一样,根本不给进程任何机会就杀死了,所以不可能做出响应。
usingnamespace
2019-05-05 00:46:24 +08:00
@kaneg 确实,kill 和 stop 无法捕捉。。内核源码改起来哈哈哈 重新编译内核 然后全盘崩掉(逃)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/560760

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX