【问题标题】:How to fire Java method using bash如何使用 bash 触发 Java 方法
【发布时间】:2011-11-23 01:18:14
【问题描述】:

假设我启动了一个 Java 应用程序:

java -cp whatever.jar com.example.Start

进程启动正常并继续以 PID 1314 运行。

现在我希望系统根据用户请求触发一个方法。
我如何使用 bash 来指示正在运行的 PID 并让它触发一个方法?

【问题讨论】:

  • 也许 bash 脚本可以写入一个文件,你的 java 进程可以监视/轮询。
  • @Scorpion 可以,但一点也不优雅。
  • 是的,你是对的,但是使用 java 7 watch 服务,它会更容易做并且在性能方面会更好。我不确定是否可以使用 bash 脚本向消息队列发送消息,因为这是公开函数的标准方法。

标签: java pid signal-handling


【解决方案1】:

我的想法是通过命名管道将 bash 回显数据到 Java 进程,我很确定 Java 支持。

【讨论】:

  • Java 不支持命名管道——它可以在 Linux/Unix 上通过 nio 和 io 包读取/写入它们,但它不能生成它们。
  • 啊,所以启动脚本需要创建命名管道,然后启动将连接到它的 Java 应用程序,然后稍后的 bash 脚本可以通过该命名管道与之交互。酷。
  • 是的,只是 mkfifo 来制作命名管道... IIRC 它将是持久的,因此不必在每次脚本调用时重新制作它......但您可以使用一点 bash编写脚本以查看它是否存在,如果不存在则生成它。
【解决方案2】:

要与 Java 进程通信,您通常会使用来自另一个进程的 RMI(这可能在同一个 JAR 中)

但是,如果您想要一个纯 bash/unix 实用程序解决方案,您可以让应用程序在端口上侦听命令并发送回响应。这意味着您可以使用普通 telnet 发送命令并获取输出。一个例子是使用http 服务器和wget,或者你可以有一个简单的基于套接字的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2021-03-27
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多