Python 我的流程发生了什么变化?

Python 我的流程发生了什么变化?,python,process,Python,Process,我正在执行一个SSH进程,如下所示: checkIn() sshproc = subprocess.Popen([command], shell=True) exit = os.waitpid(sshproc.pid, 0)[1] checkOut() 重要的是,流程在这些代码行之前和之后形成checkIn()和checkOut()操作。我有一个测试用例,涉及通过手动关闭终端窗口退出SSH会话。果不其然,我的程序运行不正常,在这种情况下,永远不会调用checkOut()。有人能给我一个指针,让

我正在执行一个SSH进程,如下所示:

checkIn()
sshproc = subprocess.Popen([command], shell=True)
exit = os.waitpid(sshproc.pid, 0)[1]
checkOut()
重要的是,流程在这些代码行之前和之后形成
checkIn()
checkOut()
操作。我有一个测试用例,涉及通过手动关闭终端窗口退出SSH会话。果不其然,我的程序运行不正常,在这种情况下,永远不会调用
checkOut()
。有人能给我一个指针,让我看看我能在什么地方修复这个bug吗

如果有任何其他信息会有所帮助,请告诉我


谢谢

Python进程通常会在与
ssh
子进程相同的窗口中执行,因此,当您关闭该窗口时,在有机会执行
checkOut
之前,它也会突然终止。要尝试并确保在程序退出时调用函数(尽管对于足够突然的终止,这取决于您的操作系统,可能无法保证),请尝试Python标准库模块。

也许您所需要的只是一个
尝试。。。最后
block

try:
    checkIn()
    sshproc = subprocess.Popen([command], shell=True)
    exit = os.waitpid(sshproc.pid, 0)[1]
finally:
    checkOut()

除非系统崩溃,否则进程将收到
SIGKILL
,等等,应该调用
checkOut()

非常整洁的模块,但没有解决问题。谢谢你的帖子@gnucom,如果您需要在进程突然终止时确保某些代码的执行(最坏的情况是,通过
kill-9
…甚至是硬件故障!),那么根据定义,您需要在单独的(“守护进程”)进程中执行该代码——一个“看门狗”,它只会等待主进程的不适时退出,如果出现这种情况,运行所说的代码。当然,处于一个不同的过程意味着对你能做什么和不能做什么的架构限制,但是(对于足够突然的终止)这是唯一的游戏:-(。感谢你的设计建议。我想这就是我最终要做的,因为
kill-9
基本上就是我一直坚持的测试用例。