我的过程怎么了?

2024-04-25 05:46:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

重要的是进程在这些代码行之前和之后形成checkIn()checkOut()操作。我有一个测试用例,它涉及通过手动关闭终端窗口来退出SSH会话。果然,我的程序没有正确运行,而且在这种情况下checkOut()从未被调用。有没有人能给我一个指针,让我看看能不能修复这个bug?你知道吗

如果有其他有用的信息请告诉我。你知道吗

谢谢!你知道吗


Tags: 代码true进程osexitshellpidssh
2条回答

也许你只需要一个try ... finally块?你知道吗

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

除非系统崩溃,否则进程会收到SIGKILL,等等,应该调用checkOut()。你知道吗

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

相关问题 更多 >