【问题标题】:sending command to process using /proc使用 /proc 发送命令进行处理
【发布时间】:2010-10-02 13:55:00
【问题描述】:

我有一个在 ubuntu 服务器上作为进程运行的应用程序。这个应用程序有命令行 gui,它允许我输入命令,然后按 enter 并运行命令。我能够编写确定进程 ID 的脚本。然后我编写以下脚本以向其发送命令:

# echo "command" > /proc/<PROCESSID>/fd/0

我已经尝试过

# echo "command" > /proc/<PROCESSID>/fd/0

# echo -e "command\r" > /proc/<PROCESSID>/fd/0

# echo -e "command\c" > /proc/<PROCESSID>/fd/0
# echo -e "\015" > /proc/<PROCESSID>/fd/0

我知道程序正在获取命令但不执行它。我怀疑这是因为我没有按回车键,可能命令行正在等待这个。有人可以建议我如何错误地使用它或更好的选择吗?

【问题讨论】:

  • '命令行 GUI'?还是“命令行用户界面”?如果你以正统的方式推动这个过程,你在键盘上输入什么?或者你也必须用鼠标做点什么?你怎么知道进程正在获取命令?
  • 命令行 UI 我认为最好描述它,没有鼠标交互。通常我通过 ssh 运行程序,然后会出现一个基于文本的命令行。在这个界面中,我可以输入命令并执行它们。如果我打开第二个单独的 ssh 界面,我可以在确定进程 ID 后输入 echo "command" > /proc//fd/0,它会出现在原始 ssh 界面中但不会执行。

标签: linux command-line process echo


【解决方案1】:

你不能那样做。 /proc/fd/0 (通常)不是您可以写入并提供进程输入的管道。

您需要做的是调用进程,其标准输入来自管道(或套接字等),以便您可以向其中写入内容。

命名管道可以在这里工作(参见 mknod(1) 或 mkfifo(3) )。

否则,您将需要一个位于其前面并使用一对管道与之对话的控制程序。

【讨论】:

  • 你是对的,我将文本发送到界面,而不是程序。我需要按照您的建议进行操作,并创建一个程序来充当适当的管道。谢谢。
【解决方案2】:

在不知道具体情况的情况下,您可能需要这个:expect

【讨论】:

  • 我已经阅读了一些关于此的内容,如果您期望可以以编程方式响应的某个提示,似乎可以使用此选项。如果没有这样的提示,你还会建议吗?我尝试使用尽可能少和干净的编码,但如果使用另一个库是最好的答案,我将不胜感激地接受......
  • 从您对上述答案的评论来看,您似乎期待某种提示:“出现基于文本的命令行”
  • 这读起来很有趣,谢谢你的评论:D
猜你喜欢
  • 2013-10-12
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多