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