我正在编写一个文件同步应用程序,每当文件被修改时我都会从文件系统收集事件,而后来我通过ssh上的rsync将其复制到远程共享。在我的设置中,我有一个连接到QTimer的插槽。每隔5秒我从sqlite数据库中选择一个文件进行同步,并使用以下参数启动QProcess :: start
/usr/bin/rsync -a /aufs/another-test-folder/testfile286.txt --rsh="ssh -p 8023" user@myserver.de:/home/neox/another-test-folder/testfile286.txt --rsync-path="mkdir -p /home/neox/another-test-folder && rsync"
我最多有2个并行运行的rsync进程。这会产生一个流程树:
MyApp
\_rsync
| \_ssh
|_rsync
\_ssh
问题在于,有时候应用程序会挂起,并且ps说ssh进程已经变成了僵尸。首先,我试图用SIGKILL杀死MyApp,但没有运气。比我继续杀死rsync和ssh但仍然没有运气。整棵树都挂了。如果我尝试从另一个控制台启动守护进程,或者甚至尝试ssh到另一个框,我不能。我的想法是,某处ssh阻止了一些IO资源。不知道怎么解决这个问题?
P.S。这是随机发生的,而不是经常发生的