|
1 | 1 | use std::{ |
2 | 2 | fs, |
3 | 3 | process::{Command, exit}, |
| 4 | + sync::{Arc, Mutex}, |
| 5 | + thread, |
| 6 | + time::Duration, |
4 | 7 | }; |
5 | 8 |
|
6 | 9 | use colored::Colorize; |
@@ -71,23 +74,50 @@ impl Step for Qemu { |
71 | 74 | self.cmd.arg(project.kernel.as_ref().unwrap()); |
72 | 75 |
|
73 | 76 | if self.is_check_test { |
| 77 | + let test_success = Arc::new(Mutex::new(false)); |
| 78 | + let test_success_clone = test_success.clone(); |
| 79 | + |
74 | 80 | self.cmd |
75 | 81 | .exec_with_lines(project.is_print_cmd, move |line, child| { |
76 | 82 | if line.contains("All tests passed") { |
77 | 83 | println!("{}", "Test passed!".green()); |
78 | | - let _ = child.kill(); |
79 | | - let _ = child.wait(); |
80 | | - exit(0); |
| 84 | + { |
| 85 | + let mut finished = test_success_clone.lock().unwrap(); |
| 86 | + *finished = true; |
| 87 | + } |
| 88 | + |
| 89 | + // 启动一个线程,1秒后强制退出 |
| 90 | + thread::spawn(move || { |
| 91 | + thread::sleep(Duration::from_secs(1)); |
| 92 | + child.kill().expect("Failed to kill child process"); |
| 93 | + child.wait().expect("Failed to wait for child process"); |
| 94 | + exit(0); |
| 95 | + }); |
81 | 96 | } |
82 | 97 | if line.contains("Test failed") { |
83 | 98 | println!("{}", "Test failed!".red()); |
84 | | - let _ = child.kill(); |
85 | | - let _ = child.wait(); |
86 | | - exit(1); |
| 99 | + { |
| 100 | + let mut finished = test_success_clone.lock().unwrap(); |
| 101 | + *finished = true; |
| 102 | + } |
| 103 | + |
| 104 | + // 启动一个线程,1秒后强制退出 |
| 105 | + thread::spawn(move || { |
| 106 | + thread::sleep(Duration::from_secs(1)); |
| 107 | + child.kill().expect("Failed to kill child process"); |
| 108 | + child.wait().expect("Failed to wait for child process"); |
| 109 | + exit(1); |
| 110 | + }); |
87 | 111 | } |
88 | 112 | Ok(()) |
89 | 113 | }) |
90 | 114 | .unwrap(); |
| 115 | + |
| 116 | + if test_success.lock().unwrap().clone() { |
| 117 | + exit(0); |
| 118 | + } else { |
| 119 | + exit(1); |
| 120 | + } |
91 | 121 | } else { |
92 | 122 | self.cmd |
93 | 123 | .exec(project.is_print_cmd) |
|
0 commit comments