0

我正在尝试自动化Linux 代理机器的启动过程。我需要运行位于两个不同目录中的两个可执行文件并将控件返回到提示符,以便继续执行其他一些任务,例如执行 grep 以检查这两个进程是否仍在运行。以下是我尝试使用 Python 的两种不同方法:

代码片段1:(通过分叉一个子进程)

 import os
 import pdb

    def child():

    cwd = os.getcwd()  
    os.chdir("THoT") 
    os.chdir("TH_Node")  
    print "Executing TH_Node.exe........."
    command = "mono TH_Node.exe"
    os.system(command)
    os._exit(0)

    def parent():

    i = 0
      while i < 1:
        i = i + 1
      newpid = os.fork()
      if newpid == 0:
        child()
      else:
        cwd = os.getcwd()
        os.chdir("THoT")
        os.chdir("TH_Protocol")
        print "Executing TH_Protocol.exe........."
        command1 = "mono TH_Protocol.exe"
       os.system(command1)          

    parent()

代码片段2:(使用多处理)

 import multiprocessing
 import time
 import sys
 import os
 import pdb

def TH_Protocol():

 os.chdir("THoT")
 os.chdir("TH_Protocol")
 command = "mono TH_Protocol.exe"
 os.system(command)


def TH_Node():

 os.chdir("THoT") 
 os.chdir("TH_Node")  
 command1 = "mono TH_Node.exe"
 os.system(command1)


if __name__ == '__main__':
      d = multiprocessing.Process(name='TH_Protocol', target=TH_Protocol)
      d.TH_Protocol = True

      n = multiprocessing.Process(name='TH_Node', target=TH_Node)
      n.TH_Protocol = False

      d.start()
      n.start()
      d.join(1)
      n.join()

问题是虽然我让进程 TH_Protocol.exe 和 TH_Node.exe 都运行,但我需要 ssh 到另一个会话以运行 grep 命令来检查这两个进程是否正在运行。我需要在与运行 python 脚本的会话相同的会话中恢复控制。我也尝试使用 subprocess.Popen ,但我面临同样的问题。有什么办法可以解决这个问题吗?

4

1 回答 1

0

如果您只想在后台运行此脚本,并在运行时重新控制您的 ssh 会话……这与 Python 或 ssh 无关,它是基本的 shell 作业控制。

例如,假设你在远程机器上的 shell 是 sh/bash/similar,而不是这个:

remote_machine$ python script.py

… 做这个:

remote_machine$ python script.py &
[1] 55341
remote_machine$

现在你得到了提示。%1您可以使用PID与主解释器进程进行交互55341。最终完成后,您得到的下一个提示将显示如下内容:

[1]+ Done python

您不能以这种方式直接与两个子进程交互。如果您愿意,您可以随时grep搜索它们,或者搜索 PID 55341 的子进程......但是如果您让子进程print('TH_Protocol on {}'.format(os.getpid()))在它们启动时执行类似的操作,您可能会发现您的生活会更轻松,因此您不必这样做.

于 2013-08-01T20:39:00.083 回答