Feat(process): 增加ProcessGroup以及Session机制 (#1115)

* 添加make run-nographic

* 添加session和processgroup结构体

* 添加一些有关进程组的syscall

* 在fork中加入set_group

* 修改broadcast未实现的信息

* 添加对kill缺失的进程组的逻辑的补充
This commit is contained in:
火花
2025-04-22 13:22:42 +08:00
committed by GitHub
parent 50bbcae01a
commit fcb5bf4496
22 changed files with 1180 additions and 53 deletions

View File

@ -22,7 +22,8 @@ impl TtyJobCtrlManager {
let mut ctrl = core.contorl_info_irqsave();
let pcb = ProcessManager::current_pcb();
ctrl.session = Some(pcb.basic().sid());
let pid = Pid::new(pcb.basic().sid().into());
ctrl.session = Some(pid);
assert!(pcb.sig_info_irqsave().tty().is_none());
@ -61,7 +62,7 @@ impl TtyJobCtrlManager {
}
} else {
// 暂时使用kill而不是killpg
Syscall::kill(pgid, sig as i32)?;
Syscall::kill_process(pgid, sig)?;
ProcessManager::current_pcb()
.flags()
.insert(ProcessFlags::HAS_PENDING_SIGNAL);
@ -101,12 +102,12 @@ impl TtyJobCtrlManager {
if current.sig_info_irqsave().tty().is_none()
|| !Arc::ptr_eq(&current.sig_info_irqsave().tty().clone().unwrap(), &tty)
|| ctrl.session.is_none()
|| ctrl.session.unwrap() != current.basic().sid()
|| ctrl.session.unwrap() != Pid::from(current.basic().sid().into())
{
return Err(SystemError::ENOTTY);
}
ctrl.pgid = Some(Pid::new(*pgrp as usize));
ctrl.pgid = Some(Pid::from(*pgrp as usize));
return Ok(0);
}

View File

@ -790,7 +790,7 @@ impl NTtyData {
let ctrl_info = tty.core().contorl_info_irqsave();
let pg = ctrl_info.pgid;
if let Some(pg) = pg {
let _ = Syscall::kill(pg, signal as i32);
let _ = Syscall::kill_process(pg, signal);
}
if !termios.local_mode.contains(LocalMode::NOFLSH) {