2015-03-02 133 views
2

我使用Mina SSHD客戶端在OpenSSH服務器上運行遠程命令。 我正在遠程服務器上執行一個長時間運行的命令,並希望它在客戶端會話關閉時終止。斷開連接時終止遠程ssh命令

,當我從我的PC終端運行此命令:

\#ssh -t [email protected] sleep 12345 

這是我發現在遠程機器上:

\# ps -axf 

---- Omitted for clarity 

12158 ?  Ss  0:29 /usr/sbin/sshd -4 
22708 ?  Ss  0:11 \\_ sshd: [email protected]/3,pts/4 
16894 pts/3 Ss  0:00 | \\_ -bash 
17750 pts/3 R+  0:00 | | \\_ ps -axf 
17606 pts/4 Ss+ 0:00 | \\_ sleep 12345 

---- Omitted for clarity 

當我殺了SSH客戶端我的機器「睡12345 '在遠程機器上終止。

但是,當我運行完全相同的使用Mina Java SSH客戶端,這就是我所看到的。

SshClient client = SshClient.setUpDefaultClient(); 
    client.start(); 
    ConnectFuture connect = client.connect("user", "server", 22); 

    connect.await(10000); //ms 
    ClientSession session = connect.getSession(); 
    session.addPasswordIdentity("password"); 
    AuthFuture auth = session.auth(); 
    auth.await(10000); 

    ClientChannel channel = session.createExecChannel("sleep 12345"); 

    OpenFuture open = channel.open(); 
    open.await(10000); 
    Thread.sleep(15000); // ms, wait for command to run 
    channel.close(true); 
    session.close(true); 
    client.stop(); 


\# ps -axf 

---- Omitted for clarity 

27364 ?  Ss  0:00 \\_ sshd: [email protected]/0 
3277 pts/0 Ss  0:00 | \\_ -bash 
22306 pts/0 R+  0:00 |  \\_ ps axf 
21699 ?  Ss  0:00 \\_ sshd: [email protected] 
21796 ?  Ss  0:00  \\_ sleep 12345 

---- Omitted for clarity 

代碼後終止命令的上級變成初始化PID:

\# ps -axf 

21796 ?  Ss  0:00 sleep 12345 


\#ps -ef | grep sleep 

root  21796  1 0 08:26 ?  00:00:00 sleep 12345 

有一些˚F滯後還是選項在Mina中導致它在關閉會話時終止我在遠程服務器上的命令?

回答

2
ssh -t [email protected] sleep 12345 

此分配,因爲「-t」選項的遠程會話的PTY(僞終端)。當ssh會話斷開連接時,PTY將向連接到PTY的每個進程發送一個SIGHUP。這會導致「睡眠」過程退出。

要從Mina會話獲得相同的行爲,請爲該頻道請求PTY。我還沒有和米娜工作過,但看起來這是做它的方式:

ChannelExec channel = session.createExecChannel("sleep 12345"); 
channel.setUsePty(true); 
// Optionally set the PTY terminal type, lines, and columns 
OpenFuture open = channel.open(); 
... 

setUsePty()和其他PTY功能在PtyCapableChannelSession這是一個父類的ChannelExec定義。

+0

謝謝,它的工作原理 – 2015-03-03 08:07:49