浏览代码

fix(process): 修复waitpid在处理Blocked状态时的逻辑错误 (#1235)

在处理Blocked状态的子进程时,waitpid应继续等待而不是立即返回0。只有当子进程真正退出时才应返回。

Signed-off-by: longjin <longjin@DragonOS.org>
LoGin 1 天之前
父节点
当前提交
1498dbac23
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      kernel/src/process/exit.rs

+ 6 - 1
kernel/src/process/exit.rs

@@ -221,7 +221,12 @@ fn do_waitpid(
                 return Some(Ok(0));
             }
         }
-        ProcessState::Blocked(_) | ProcessState::Stopped => {
+        ProcessState::Blocked(_) => {
+            // 对于被阻塞的子进程(如正在sleep),waitpid应该继续等待
+            // 而不是立即返回0。只有当子进程真正退出时才应该返回。
+            return None;
+        }
+        ProcessState::Stopped => {
             // todo: 在stopped里面,添加code字段,表示停止的原因
             let exitcode = 0;
             // 由于目前不支持ptrace,因此这个值为false