On second thought, I'm not sure it's any better than cp and monitoring the size of the destination file.
Anyway, before you invest heavily into it, check that your version understands SIGUSR1 -- not all of them do.
dd has a notoriously iffy syntax. In fact I read somewhere that it was meant as a joke on the perversity of another syntax (JCL if I recall correctly) but somehow it just stuck.
Code:
dd if=/path/to/input/file of=/path/to/output/file
Optionally spice it with a bigger block size (
bs=8192 perhaps).