JohnZorn
V2EX  ›  Java

杀死 Java 程序

  •  
  •   JohnZorn · Sep 12, 2018 · 5714 views
    This topic created in 2822 days ago, the information mentioned may be changed or developed.

    通过 java -jar 启动的项目要如何杀死呢
    占用命令行的话可以直接 ctrl-c 掉 但是如果启动加了 &呢 linux 上 kill -9 windows 呢? 或者说 java 有命令可以对 java -jar 跑起来的程序杀掉吗 kill -9 好像是粗暴了一点

    25 replies    2018-09-26 14:18:18 +08:00
    panpanpan
        1
    panpanpan  
       Sep 12, 2018
    kill -15
    lastpass
        2
    lastpass  
       Sep 12, 2018 via Android
    →_→目前我是这样实现的。JAVA 去监听某个指定文件下是否创建 /更新了某个文件,监听之后执行 destroy 方法,把该 flush 给 flush,该 close 的 close,然后 system.exit()
    lastpass
        3
    lastpass  
       Sep 12, 2018 via Android
    并不清楚 tomcat 如何用 bat 或 sh 实现 shutdown 的。只能粗暴的使用监听了。╮(╯_╰)╭
    zhenjiachen
        4
    zhenjiachen  
       Sep 12, 2018
    wenzhoou
        5
    wenzhoou  
       Sep 12, 2018 via Android   ❤️ 1
    注册成服务。参考这个文档最后一部分。http://www.ityouknow.com/springboot/2017/05/09/springboot-deploy.html
    zhangwugui
        6
    zhangwugui  
       Sep 12, 2018   ❤️ 7
    不好意思,我看成了杀死 Java 程序员,吓死我了。
    andylsr
        7
    andylsr  
       Sep 12, 2018 via Android
    @zhangwugui 可怕😂
    Tsukihime
        8
    Tsukihime  
       Sep 12, 2018
    ps auxw |grep ******** |grep -v grep |awk '{print $2}' |xargs kill -9
    JohnZorn
        9
    JohnZorn  
    OP
       Sep 12, 2018
    @wenzhoou 这个感觉不错
    Narcissu5
        10
    Narcissu5  
       Sep 12, 2018
    优雅停机需要程序自己支持,不管什么语言这个是一定的。Springboot 就提供了对优雅停机的支持。另外通过 JMX 也是比较好的一种方式
    zhangwugui
        11
    zhangwugui  
       Sep 12, 2018
    @andylsr 哈哈哈哈,午睡没睡好,结果眼花了哈哈哈
    ArthurKing
        12
    ArthurKing  
       Sep 12, 2018
    一直都是 kill -9,反正程序从来没嫌过我粗暴
    sxul07
        13
    sxul07  
       Sep 12, 2018
    nginx 应该是类似命名管道的吧 监听文件有点骚了
    LukeChien
        14
    LukeChien  
       Sep 12, 2018 via Android
    tomcat 有个管理端口可以发送关闭命令
    likuku
        15
    likuku  
       Sep 12, 2018
    实在不行,可以拔电源线 /远程控制卡关机。
    sampeng
        16
    sampeng  
       Sep 12, 2018
    就是优雅停机啊。。。
    楼上 4,5 楼。本质上都是 kill。只是好看和方便一点。
    真正的优雅停机。需要程序加一个 shutdown 的接口或者方式。2 楼的就算一种。
    高并发和有强一致要求的,一定要有这个玩意。不然停机的瞬间,新用户进来搞一半就不好了
    expy
        17
    expy  
       Sep 12, 2018
    程序自己要处理 SIGINT 吧,不然还是得强制退出。
    broadliyn
        18
    broadliyn  
       Sep 12, 2018 via iPhone
    spring boot 提供有 management 接口来优雅下蛋的。
    realpg
        19
    realpg  
    PRO
       Sep 12, 2018
    @lastpass #3
    没研究过 估计是 pid 文件 以及 signal
    zhenjiachen
        20
    zhenjiachen  
       Sep 12, 2018 via iPhone
    @sampeng 把 Spring boot 打包成可执行文件,是 Spring boot 已经实现了 shutdown 了,当传入 ztop 的时候会调用 shutdown 事件
    yidinghe
        21
    yidinghe  
       Sep 12, 2018 via Android
    windows 下也有关闭进程的命令,可以搜下 wmic
    sampeng
        22
    sampeng  
       Sep 13, 2018 via iPhone
    @zhenjiachen 程序不实现 shutdown,各种资源会自己释放?是,进程退掉资源会释放。但我说的是优雅降级退出。

    我理解的降级退出是程序内部将各个服务都停止工作、保存好该保存的。然后告知外部已经停止,最后再退出或者外部二次确认后退出。
    baozijun
        23
    baozijun  
       Sep 13, 2018 via iPhone
    jps 即可,找到 pid,kill
    geelaw
        24
    geelaw  
       Sep 13, 2018 via iPhone   ❤️ 1
    我严重怀疑楼主有没有做过任何严肃的编程或者做过最简单的编程思考。

    基本的思路是调用操作系统 API 启动 Java 之后你会得到进程 ID 或者 handle。如果你要干掉一个进程,调用结束进程的 API 即可。

    映射到 Win32,用 CreateProcess、ShellExecute 之后你可以获得进程 handle,你可以调用 TerminateProcess 结束进程,最后调用 CloseHandle 释放进程句柄。

    映射到 PowerShell,先用 Start-Process 启动进程,并获得进程对象,稍后用 Stop-Process 结束进程。你可以调用 Dispose 也可以不调用(会自动回收的)。
    xixinimei
        25
    xixinimei  
       Sep 26, 2018
    要看系统对哪些 Kill 信号做了反应。比如 shutdownhook 可以响应 kill -15 信号,但却对 kill -9 浑然不知。如果程序本身没有写 shutdownhook 的话,那 kill -9 和 kill -15 没区别。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   938 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 20:42 · PVG 04:42 · LAX 13:42 · JFK 16:42
    ♥ Do have faith in what you're doing.