Transient fault tolerance via dynamic process-level redundancy