过程不是背景

时间:2012-09-06 14:20:53

标签: python

我正在运行下面显示的python脚本。该脚本对远程计算机执行ssh并在后台运行c程序。但是在运行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;
            }

2 个答案:

答案 0 :(得分:0)

请尝试给出./a.out

的绝对路径

答案 1 :(得分: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文件中的内容等等。总而言之,便携性更高。< / p>