java - 如何在 Linux 中软终止进程?

标签 java linux

我最近在 linux 操作系统上设置了我的游戏服务器,并使用 SSH 运行运行游戏服务器的 java 文件。为了让我能够退出 SSH session 但保持服务器运行,我正在使用 nohup 并创建一个脚本来为我执行此操作:

#!/bin/bash
cd "RSPS"
echo "Booting the RSPS..."
nohup java -Xmx220m -cp bin:lib/* com.ruseps.GameServer &

我可以随时使用 tail 命令查看我的服务器的状态,如下所示:

#!/bin/bash
cd "RSPS"
tail -f nohup.out

但是,我的服务器有关闭 Hook ,它期望 java 文件退出,因此运行 top 然后 kill 服务的 PID 忽略了关闭 Hook ,从而中断“保存”状态并使我的服务器无法启动。

有没有一种方法可以重新打开进程并温和地终止服务,即退出它以便文件可以运行关闭 Hook ?

我目前正在做的不是运行关闭 Hook ,而是通过命令行使用它:

top
kill PID_HERE

最佳答案

In order for me to be able to exit the SSH session but keep the server running, I am using nohup and creating a script which does this for me:

首先:不要那样做!

实现适当的服务。如果运行它的机器使用 systemd,你所要做的就是编写一个单元文件 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-unit_files

如果您的机器使用 init-script 样式的初始化系统,请复制一些类似网络服务的初始化脚本,例如网络服务器,并根据您的需要进行修改。

请记住,您应该为您的服务器创建一个新的用户/组,以便在启动时检查它是否以 root 身份运行(因为这总是一个坏主意)。

However, my server has shutdown hooks

这些钩子(Hook)是如何实现的?如何通知您的服务器关闭? SIGTERM 信号(这是 kill 发送的默认信号,尽管它的名称如此)是通知进程的标准方式,它们将正常终止。有关详细信息,请参阅官方 Java 文档:https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/signals.html

关于java - 如何在 Linux 中软终止进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55077864/

相关文章:

java - 为什么我们可以使用 'this'作为实例方法参数?

linux - 使用 pipe 而不是 pipe2 时,在 fork 之后阻止在管道上读取

linux - perl 中的文件处理(.conf 文件)

java - 如何比较原语和 Java 泛型?

java - 附加调试器时程序永远不会抛出异常

java - Android - 如何将工具栏固定在 AppBar 的顶部

java - 添加版权信息生成的java代码 - Jcodemodel

c++ - Linux绘制像素缓冲区

linux - Oracle 10g ProC 的 Mach-o 到 Ubuntu 可执行文件

c - 通过套接字发送结构数组