From cae618225763a6f7ddd7ee422d44414cd2d07561 Mon Sep 17 00:00:00 2001 From: LoGin Date: Fri, 18 Oct 2024 17:47:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=B4=E6=97=B6=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E9=80=80=E5=87=BA=E6=97=B6=E5=A4=84=E7=90=86?= =?UTF-8?q?tty=E5=89=8D=E5=8F=B0=E8=BF=9B=E7=A8=8B=E7=BB=84=E4=BA=A7?= =?UTF-8?q?=E7=94=9Fpanic=E7=9A=84bug=20(#985)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/src/process/fork.rs | 2 ++ kernel/src/process/mod.rs | 9 +++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/kernel/src/process/fork.rs b/kernel/src/process/fork.rs index f750e4c2..547325c6 100644 --- a/kernel/src/process/fork.rs +++ b/kernel/src/process/fork.rs @@ -166,6 +166,8 @@ impl ProcessManager { let pcb = ProcessControlBlock::new(name, new_kstack); + // TODO: 注意!这里设置tty的操作不符合Linux的行为!(毕竟创建进程不一定要fork,也可以用clone来创建) + // 正确做法应该是在实现进程组之后去管理前台进程组。 pcb.sig_info_mut() .set_tty(current_pcb.sig_info_irqsave().tty()); diff --git a/kernel/src/process/mod.rs b/kernel/src/process/mod.rs index fa35a988..d5841e93 100644 --- a/kernel/src/process/mod.rs +++ b/kernel/src/process/mod.rs @@ -425,12 +425,9 @@ impl ProcessManager { // TODO 由于未实现进程组,tty记录的前台进程组等于当前进程,故退出前要置空 // 后续相关逻辑需要在SYS_EXIT_GROUP系统调用中实现 - pcb.sig_info_irqsave() - .tty() - .unwrap() - .core() - .contorl_info_irqsave() - .pgid = None; + if let Some(tty) = pcb.sig_info_irqsave().tty() { + tty.core().contorl_info_irqsave().pgid = None; + } pcb.sig_info_mut().set_tty(None); drop(pcb);