0

以下に示すpythonスクリプトを実行しています。このスクリプトは、リモート マシンに対して ssh を実行し、バックグラウンドで ac プログラムを実行します。しかし、pythonスクリプトを実行すると、次の出力が得られます。

上記は、 a.out が実行され、pid が [1] 2115 であることを意味します。ただし、リモート マシンにログインして「ps」コマンドで a.out を確認すると、表示されません。もう 1 つの観察結果は、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

ただし、sshを介してコマンドを呼び出すためにシェルを使用するべきではありません。sshプロトコルには、コマンドの実行に対するサポートが組み込まれています。HostModモジュールがどのように機能するかはわかりませんが、シェルからこれを試すことができます(移植して使用するのは簡単ですsubprocess)。

ssh somehost nohup sleep 20
<Ctrl+C>

ssh somehost
ps ax | grep sleep

そして、sleepプロセスがまだ実行されていることを確認する必要があります。このメソッドはシェルをインスタンス化しません。これは、実行するシェルやファイルの内容などを制御できる場合とできない場合があるため、はるかに信頼性が高くなります~/.(...)rc。全体として、はるかに移植性が高くなります。

于 2012-09-07T06:39:58.807 に答える
0

./a.out の絶対パスを指定してみてください

于 2012-09-06T14:24:15.180 に答える