【问题标题】:How to kill a process running on server如何杀死服务器上运行的进程
【发布时间】:2014-03-06 07:45:27
【问题描述】:

我正在使用 run_command shell 程序从客户端机器上在服务器上运行一些命令,这个 shell 程序通过套接字通信在服务器上运行特定的命令。在服务器端,我使用 java 程序在服务器上运行命令,通常对于像 ls ,pwd 这样的命令它运行良好,但是对于像 "tail -f" 这样的命令虽然我按 ctrl^c 来停止命令,但它并没有停止在服务器端。

  1. 有什么方法可以捕获 ctrl^c 以便我发送一些终止服务器上正在运行的命令的消息

  2. 要杀死服务器上的某些命令,我​​怎样才能只杀死从客户端运行的特定命令而不是任何其他命令

【问题讨论】:

    标签: java linux bash shell


    【解决方案1】:

    使用 kill 命令。更多信息请参考网址Kill Command for UNIX

    【讨论】:

    • 我知道 kill 会完成这项工作,我已经提到过,我问过如何使用它,还有其他选择...
    • # kill -9 '进程ID'
    • 如何获取在服务器上运行的 proccess 的 proccess id,并且我还要求我需要捕获 ctrl^c 操作,每当用户执行 ctlr^c 操作时,应发送自动终止命令。 .
    【解决方案2】:

    首先,我假设由于某种原因你不能在 run_command 上运行 kill 。如果可以,请忽略以下答案。

    在服务器上,启动进程。将 Process 对象与 ID 一起包装(自动生成)。将包装器添加到列表或地图。在客户端向用户显示 ID。

    当用户想要终止进程时,发送类似“mykill”的内容。在服务器上,如果 command.equals("mykill"),则获取 id 指示的进程并调用其 destroy 方法,并从列表中删除。还要从您的列表中删除陈旧的进程(无论是运行还是退出,只是为了防止您的列表或地图变得太大)。

    我正在使用 run_command shell 程序从客户端机器上在服务器上运行一些命令,这个 shell 程序通过套接字通信在服务器上运行特定的命令。

    我认为您不使用腻子是有充分理由的。我还假设您可以修改该服务器的代码。

    请注意,我自己没有尝试过。我只是给出想法。

    【讨论】:

    • 我正在使用腻子,在客户端的腻子中我正在执行shell程序“run_command -s 192.168.1.91 -c ls”;运行命令后,在服务器端,我有一个接受此命令并在该服务器上运行的 java 程序,问题是我没有直接访问服务器的权限,所以当我从客户端执行 tail -f 之类的命令并按 ctr^c 虽然 shell 是在客户端的腻子中退出,但命令仍在服务器上运行,需要加载...,我无法杀死任何进程,因为其他人可能在服务器端运行了相同的命令...这就是问题
    • 好吧.. 所以现在,如果您可以修改服务器上的 java 程序,那么我的建议可能会起作用。 java 程序可能正在创建进程并启动它。请注意,java 程序本身并不是命令行。因此,即使您能够将 Ctrl C 发送到服务器,它也可能不会这样对待它。您将必须包装 Process 并为其提供一些自动递增的 ID。在 run_command 客户端上打印该 ID(例如 123)。当您键入命令为 run_command -s 192.168.1.91 -c mykill 123 时,它将杀死进程 123。
    • 你能不能不打开另一个腻子会话/窗口,然后说 run_command ps -ef|grep tail 。获得 pid 后,使用 run_command kill id。我猜你将不得不关闭以前的腻子会话/窗口。
    【解决方案3】:

    也许你正在寻找这个

    killall `pidof ProcessName` 
    

    【讨论】:

      猜你喜欢
      • 2019-03-26
      • 2021-03-12
      • 2022-08-08
      • 2019-10-12
      • 2015-03-12
      • 1970-01-01
      • 2015-08-29
      • 2018-10-14
      • 1970-01-01
      相关资源
      最近更新 更多