我正在运行下面显示的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;
}
答案 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>