0

我正在运行如下所示的 python 脚本。该脚本对远程机器执行 ssh 并在后台运行 ac 程序。但是在运行 python 脚本时,我得到以下输出:

这意味着 a.out 已运行并且 pid 为 [1] 2115 。但是,当我登录到远程机器并通过“ps”命令检查 a.out 时,我看不到它。另一个观察结果是,当我在 python 脚本 thread.sleep(20) 中添加延迟语句时,当脚本仍在运行时,如果我签入远程机器,a.out 是活动的。

    #!/usr/bin/python
            import HostMod   #where ssh function is wrote
            COMMAND_PROMPT1 = '[#$] ' 
            p = HostMod.HostModule()
            obj1=p.HostLogin('10.200.2.197', 'root', 'newnet') #ssh connection to remote system
            obj1.sendline ('./a.out > test.txt &') #sending program to remote machine to executethere
            obj1.expect (COMMAND_PROMPT1)
            print obj1.before
            #a.out program 
            int main()
            {
                    while(1)
                    {
                            sleep(10);
                    }

                    return 0;
            }
4

2 回答 2

0

尝试使用nohup

...
obj1.sendline ('nohup ./a.out > test.txt &') #sending program to remote machine to executethere

但是您真的不应该使用 shell 通过 ssh 调用命令。ssh 协议内置了对运行命令的支持。我不确定你的 HostMod 模块是如何工作的,但你可以从你的 shell 中尝试这个(很容易移植使用subprocess):

ssh somehost nohup sleep 20
<Ctrl+C>

ssh somehost
ps ax | grep sleep

你应该看到你的sleep进程仍在运行。此方法不会实例化 shell,这更可靠,因为您可能控制也可能不控制运行哪个 shell、~/.(...)rc文件中的内容等。总而言之,更便携。

于 2012-09-07T06:39:58.807 回答
0

请尝试给出 ./a.out 的绝对路径

于 2012-09-06T14:24:15.180 回答