分析进程资源占用
(rst *commonStructs.TestCaseResult, pinfo *ProcessInfo, judger bool)
| 16 | |
| 17 | // 分析进程资源占用 |
| 18 | func (session *JudgeSession) saveExitRusage(rst *commonStructs.TestCaseResult, pinfo *ProcessInfo, judger bool) { |
| 19 | ru := pinfo.Rusage |
| 20 | status := pinfo.Status |
| 21 | |
| 22 | tu := int(ru.Utime.Sec*1000 + int64(ru.Utime.Usec)/1000 + ru.Stime.Sec*1000 + int64(ru.Stime.Usec)/1000) |
| 23 | //maxrss := ru.Maxrss |
| 24 | //if runtime.GOOS == "darwin" { |
| 25 | // maxrss = maxrss / 1024 |
| 26 | //} |
| 27 | mu := int(ru.Minflt * int64(syscall.Getpagesize()/1024)) |
| 28 | |
| 29 | // 特判 |
| 30 | if judger { |
| 31 | rst.SPJTimeUsed = tu |
| 32 | rst.SPJMemoryUsed = mu |
| 33 | rst.SPJReSignum = int(status.Signal()) |
| 34 | session.Logger.Infof( |
| 35 | "checker exit with code: %d, signum: %d, Time used: %d, Mem used: %d.", |
| 36 | pinfo.Status.ExitStatus(), |
| 37 | rst.SPJReSignum, |
| 38 | rst.SPJTimeUsed, |
| 39 | rst.SPJMemoryUsed, |
| 40 | ) |
| 41 | } else { |
| 42 | rst.TimeUsed = tu |
| 43 | rst.MemoryUsed = mu |
| 44 | rst.ReSignum = int(status.Signal()) |
| 45 | session.Logger.Infof( |
| 46 | "program exit with code: %d, signum: %d, Time used: %d, Mem used: %d.", |
| 47 | pinfo.Status.ExitStatus(), |
| 48 | rst.ReSignum, |
| 49 | rst.TimeUsed, |
| 50 | rst.MemoryUsed, |
| 51 | ) |
| 52 | } |
| 53 | } |
| 54 | |
| 55 | // 分析进程退出状态 |
| 56 | func (session *JudgeSession) analysisExitStatus(rst *commonStructs.TestCaseResult, pinfo *ProcessInfo, judger bool) { |