Command
一个小型 Iron 项目在某些路由中调用 a并返回 a Response
。下面是路由处理函数的相关代码:
fn convert(req: &mut Request) -> IronResult<Response> {
// ...
// init some bindings like destination_html and destination_pdf
// ...
convert_to_pdf(destination_html, destination_pdf);
Ok( Response::with((status::Ok, "Done")) )
}
以及被调用函数的代码:
fn convert_to_pdf(destination_html: &str, destination_pdf: &str) {
Command::new("xvfb-run")
.arg("-a")
.arg("wkhtmltopdf")
.arg(destination_html)
.arg(destination_pdf)
.stdout(Stdio::null())
.stderr(Stdio::null())
.spawn()
.expect("failed to execute process");
}
该过程有效(文件从 HTML 转换为 PDF)并将响应返回给浏览器。一切都很好,但是作为我的应用程序的子进程,僵尸进程仍然存在:
我不知道为什么,也不知道如何避免。我能做什么?
该wkhtmltopdf
命令是一个漫长的过程,我不想同步调用它并等待它的返回。而且我不想每天两次重新启动我的 Rust 程序(僵尸孩子的父级)来杀死僵尸。