2011-08-25 68 views
5

如何确保在使用Python Paramiko在远程计算机上生成进程时,进程在连接时会死掉?如何确保当我杀死一个Python Paramiko脚本时,所有生成的进程都会死亡?

具体来说,我遇到的问题是我会运行wget或其他命令使用Paramiko,它会挂起。不幸的是,当我直接杀死python脚本进程时,远程机器上的进程并没有死亡。它只是继续运行,我还有另一个挂起的过程。

我必须直接杀死进程,因为我试图将它与只能直接杀死进程的工具链接。

我听说这可以通过使SSH成为“控制终端”在SSH中完成。 Paramiko中有没有什么能够做到这一点,或者在远程机器产卵后终止任何进程?

谢谢!

+0

当你终止ssh连接时,远程命令的stdin达到EOF。并不是所有的命令都检查这个条件并在这种情况下继续运行。我很惊讶,但这是wget的问题(除非你正在下载大文件)。 –

回答

2

您需要分配一个psedo-tty,以便在连接关闭时将SIGHUP发送到子进程。行为良好的进程将在SIGHUP上退出。看到这个关于设置伪tty的答案:Paramiko and Pseudo-tty Allocation