The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
jicg

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

  •  
  •   jicg · May 3, 2019 · 6167 views
    This topic created in 2600 days ago, the information mentioned may be changed or developed.

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

    15 replies    2019-05-05 00:46:24 +08:00
    chenset
        1
    chenset  
       May 3, 2019
    window 任务管理器这个以前查过, golang 层好像的确监听不到.
    chenset
        2
    chenset  
       May 3, 2019
    但是 windows 下的 IDE 的 run & stop 是支持的 os.Signal 的
    chenset
        3
    chenset  
       May 3, 2019
    所以要实现监听可以试试用命令行的 taskkill
    ysc3839
        4
    ysc3839  
       May 3, 2019 via Android
    Windows 没有 Unix 的 signal 机制,所以实现不了的。
    geelaw
        5
    geelaw  
       May 3, 2019 via iPhone
    CLI: 用 SetConsoleCtrlHandler 处理 CTRL_CLOSE_EVENT
    GUI: 在 WdProc 里处理 WM_CLOSE
    lusi1990
        6
    lusi1990  
       May 3, 2019 via Android
    go,not golang
    404neko
        7
    404neko  
       May 4, 2019
    .Net 可以用 WaitForExit 达到监听的目的 前提是进程是你的进程打开的
    KasuganoSoras
        8
    KasuganoSoras  
       May 4, 2019
    程序启动时顺带启动一个 cmd 脚本,脚本里面循环检测进程是否存在,如果不存在就执行 xxx
    DefoliationM
        9
    DefoliationM  
       May 4, 2019 via Android
    tasklist 抓一下
    zwh2698
        10
    zwh2698  
       May 4, 2019 via Android
    看了楼上回答的,没有一个满意的。监听进程如果你创建的,你可以 wait ,不是你创建的,你要打开进程句柄 wait, 是不是很烦。 所以进程管理的 queryprocessinfo 这个 API,你也可以用,这样就解决了。
    xuanbg
        11
    xuanbg  
       May 4, 2019
    任何程序都可以通过系统 API 监听进程运行状态,但都不能监听到自身的异常退出。因为在此之前,你就异常退出了呀。所以,自己另外起一个守护进程监听就好了嘛。
    Qzier
        12
    Qzier  
       May 4, 2019 via iPhone
    python 可以监听,go 不清楚。
    jicg
        13
    jicg  
    OP
       May 4, 2019
    主进程用 golang 写的。调用 winform 开发的 gui 程序。在任务管理器里面关闭 golang 程序的话,winform 程序还是在跑着。如果关闭 winform 程序,golang 能监听到,程序能正常退出
    kaneg
        14
    kaneg  
       May 4, 2019 via iPhone
    通过这种方式关闭进程和在 Linux 下用 kill -9 一样,根本不给进程任何机会就杀死了,所以不可能做出响应。
    usingnamespace
        15
    usingnamespace  
       May 5, 2019 via iPhone
    @kaneg 确实,kill 和 stop 无法捕捉。。内核源码改起来哈哈哈 重新编译内核 然后全盘崩掉(逃)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   996 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 19:21 · PVG 03:21 · LAX 12:21 · JFK 15:21
    ♥ Do have faith in what you're doing.