mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-25 18:23:22 +00:00
Feat(process): 增加ProcessGroup以及Session机制 (#1115)
* 添加make run-nographic * 添加session和processgroup结构体 * 添加一些有关进程组的syscall * 在fork中加入set_group * 修改broadcast未实现的信息 * 添加对kill缺失的进程组的逻辑的补充
This commit is contained in:
@ -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(¤t.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);
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user