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