pub fn launch( program: &Path, args: &[String], marker: &Path, timeout: Duration, ) -> Result<(), LaunchFail>
一次全步骤:spawn → wait_ready;失败时子进程已收场(超时路径 kill)。 成功:Handle 已 drop = 分离脱管,子进程独立活着(这正是 launcher 放手的方式)。