Linux – Why does rsync spawn multiple processes for me

linuxrsync

I am using the following cron statement to backup from one folder to another folder in the same machine:

19 21 * * * root  rsync -ac --delete /source/folder /dest/folder

When I use pstree, I see the cron forked three processes

 ├─cron───cron───rsync───rsync───rsync

And ps

 9972 ?        Ds     1:00 rsync -ac --delete /source/folder /dest/folder
 9973 ?        S      0:29 rsync -ac --delete /source/folder /dest/folder
 9974 ?        S      0:09 rsync -ac --delete /source/folder /dest/folder

Why are three processes? Can I limit to only one?

Best Answer

http://rsync.samba.org/how-rsync-works.html

Rsync is heavily pipelined. This means that it is a set of processes that communicate in a (largely) unidirectional way. Once the file list has been shared the pipeline behaves like this:
generator → sender → receiver

The output of the generator is input for the sender and the output of the sender is input for the receiver. Each process runs independently and is delayed only when the pipelines stall or when waiting for disk I/O or CPU resources.

You are running a local rsync (source and destination are local filesystem) so all three processes will run there.
There is nothing you can do, this is by design.