diff --git a/src/error.rs b/src/error.rs index ad207c6..4410c49 100644 --- a/src/error.rs +++ b/src/error.rs @@ -57,6 +57,7 @@ impl fmt::Display for Error { } pub fn system_error(err: Error) -> JudgeResponse { + warn!("{:?}", err); JudgeResponse { time_used: 0, memory_used: 0, diff --git a/src/runner.rs b/src/runner.rs index f99e4f4..360a458 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -294,6 +294,8 @@ impl Runner { } }; let status_fd = file.into_raw_fd(); + let child_proc_str = format!("/proc/{}", pid); + let child_proc = Path::new(&child_proc_str); unsafe { if self.traceme { @@ -320,13 +322,16 @@ impl Runner { libc::kill(pid, libc::SIGKILL); break; } - debug!("vm_mem: {}", vm_mem); + // debug!("vm_mem: {}", vm_mem); // 控制子进程恢复执行 libc::ptrace(libc::PTRACE_CONT, pid, 0, 0); } // out call // 等待子进程结束 + if !child_proc.exists() { + return judge_error("Process exited abnormally".to_string()); + } if libc::wait4(pid, &mut status, 0, &mut rusage) < 0 || libc::WIFEXITED(status) { debug!("exited: {}", libc::WIFEXITED(status)); break;