use pipe to block process exit until all transitive children exit