【问题标题】:Linux - communicating with a process? rejoin process in action?Linux - 与进程通信?重新加入流程?
【发布时间】:2009-05-25 17:46:55
【问题描述】:

问这个问题我觉得有点傻,但我对 linux 还比较陌生(在经验方面比时间方面更多),我一直想知道的一件事是我是否可以“重新加入”(我自己的术语)在运行时处理。

例如,如果我将游戏服务器或 eggdrop IRC 机器人设置为在后台运行,是否可以使用命令来查看该进程的运行情况并查看它提供给控制台的所有输出?

我说的不仅仅是使用“top”命令查看进程,而是实际上链接到它,就好像我只是从命令行运行它一样。

谢谢。

【问题讨论】:

    标签: linux ubuntu console


    【解决方案1】:

    调试器可以“附加”到正在运行的进程,但您最好在screen 中运行您的程序(它可以让您以相当自然的方式分离和重新附加到终端)。


    可能有一些好东西好东西:

    【讨论】:

    • 幸运的是,我的提供商禁用了屏幕 :)
    • +1 用于屏幕。屏幕可让您在同一会话中附加到相同的术语/多组术语。
    【解决方案2】:

    你能说得更具体点吗?您是否只是在谈论在当前会话中将进程置于后台,然后将其放回前台。

    例如:

    doLongTask &
    
    # Later
    
    fg %3
    

    本例中的 3 是 doLongTask 实例的作业号。您可以通过以下方式查看所有正在运行的作业:

    jobs
    

    但请注意,这仍然只会让您看到正在输出到控制台的内容。 IE。标准输出和标准错误,减去任何重定向。

    【讨论】:

      【解决方案3】:

      简单的答案是:

      >> ./runmyserver
      <press ctrl-z>
      >> bg
      >> ...do something else ...
      >> fg
      

      您也可以在后台启动:

      >> ./runmyserver &
      

      对于更复杂的事情,例如断开服务器与控制台会话的连接(因此当您注销时它仍在运行),您真的需要 screen.也许求他们,这并不是真正的安全风险,而且它是一个有用的程序。

      另外请注意,ctrl-z 实际上会暂停您的服务器,直到bg,所以如果有人在上面玩它可能会跳过一个节拍,最好尽快完成。

      最后,许多游戏服务器都为这种事情提供了远程登录,这将解决其中的许多问题。在寻找替代方案之前,请确保您的游戏和主机不支持此功能。

      编辑:重新阅读您的问题。听起来您至少可以使用重定向到文件来获得输出。但是,这不会让您添加更多输入:

      ./runmyserver > log.txt
      

      【讨论】:

        【解决方案4】:

        如果您提前知道要执行此操作,请使用 screen(1) 并在屏幕会话中在前台运行您的服务器。您将能够脱离屏幕会话并让进程继续运行。然后,您可以稍后重新附加您的屏幕会话并查看它之后的任何输出,最大为回滚缓冲区的大小。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-13
          • 1970-01-01
          • 1970-01-01
          • 2012-10-20
          • 1970-01-01
          • 1970-01-01
          • 2011-03-28
          相关资源
          最近更新 更多