为什么 rsync 会自行分叉?为什么这样一个分叉的进程几乎处于空闲状态(如 iotop 所示)?

为什么 rsync 会自行分叉?为什么这样一个分叉的进程几乎处于空闲状态(如 iotop 所示)?

这是指此处所述事项我也遇到了同样的情况。

在我的其中一台服务器上,我运行了 rsync,将一个大目录(大小超过 300 Gb)备份到安装在同一台机器上的另一个磁盘。被 rsync 的目录包含数千个目录和文件。我发出了一个带有“nohup”的 rsync 命令,然后使用“&”命令将其推送到后台。远程 bash shell(使用 putty)上给出的完整命令是:

nohup rsync -avh /some/local/dir /backup/ >> /opt/rsync.dec22.log &

然后,为了检查数据复制的速率,我使用了“iotop”命令,发现有 3 个 rsync 使用相同的参数运行。搜索后,我发现上面的链接说这是正常的。

但是,当我使用 iotop 来监控系统中运行的 rsync 进程时,我发现一个进程正在读取文件,一个进程正在写入文件,但还有一个进程处于空闲状态。这种行为似乎不错,因为一个进程每次只做一件事,但是第三个进程在做什么(如下图中间所示)?

我使用过的 iotop 命令是:

iotop -p22250 -p22251 -p22252

以下是 iotop 命令输出的屏幕截图:

iotop 命令输出显示 3 个 rsync 进程

我之所以问这个问题,是因为我经常使用 rsync,并且想了解它的行为以获得长期利益。我甚至读过手册,但它没有提到分叉。

答案1

rsync 是一个设计为客户端和服务器的程序。服务器读取,客户端写入。想象一下,你拥有的不是一台计算机,而是网络上的计算机,如果你这样想,我相信事情会更清楚。

然后是控制器。由于 IO 操作往往会带来一定的风险,因此 IO 问题不应导致完全阻塞或崩溃。因此,它会为每个连接创建一个分支并驻留在后台。

相关内容