如何在Linux中轻柔地杀死进程?

时间:2019-03-09 13:33:50

标签: java linux

我最近在Linux操作系统上设置了游戏服务器,并正在使用SSH运行运行游戏服务器的java文件。为了使我能够退出SSH会话但保持服务器运行,我正在使用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

但是,我的服务器具有关闭挂钩,该挂钩希望运行top并为此而退出Java文件,然后kill输入服务的PID会忽略关闭挂钩,从而破坏了“保存”状态,并且使我的服务器无法启动。

有没有一种方法可以重新打开进程并轻柔地终止服务,例如退出该文件,以便文件可以运行关闭钩子?

我目前正在执行的未运行关闭挂钩的操作是通过命令行使用的:

top
kill PID_HERE

1 个答案:

答案 0 :(得分:3)

  

为了使我能够退出SSH会话但保持服务器运行,我正在使用nohup并创建一个脚本来为我执行此操作:

首先: 不要这样做!

实施适当的服务。如果运行该计算机的计算机使用的是 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用户身份运行(因为这始终是个坏主意)。

  

但是,我的服务器有关闭钩子

这些挂钩如何实现?如何通知您的服务器关闭? SIGTERM信号(尽管名称kill@media (orientation: portrait) and (max-width: 400px) {Fooobar} @media (orientation: landscape) and (max-width: 400px) {foobar} 发送的默认信号)是通知过程的标准方法,它们应正常终止。有关详细信息,请参见Java官方文档:https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/signals.html