|
@@ -140,3 +140,9 @@ Eonix内核中的会话和进程组机制是任务管理系统的重要组成部
|
|
|
会话与进程组的管理由`ProcessList`模块实现,新会话通过`Session::new`创建,进程组通过`Session::new_group`添加到会话。移除进程组时,如果会话中无其他进程组,会自动解除与控制终端的绑定。`ProcessList`提供方法查找会话和进程组,如`try_find_session`和`try_find_pgroup`。信号通过`ProcessGroup::raise`广播到整个进程组,或通过`Session::raise_foreground`广播到前台进程组。
|
|
|
|
|
|
会话和进程组与信号机制紧密协作,提供多层次的任务控制能力。会话通过前台进程组分发信号,实现广播,可以控制用户当前交互作业。用户可以通过绑定的终端发送信号(如`SIGSTOP`或`SIGCONT`)控制作业状态切换。当会话领导进程终止时,内核会自动释放绑定的控制终端,并将会话中所有进程移至后台。
|
|
|
+
|
|
|
+## 实现中遇到的问题
|
|
|
+
|
|
|
+当前实现中,进程中对于其子线程、子进程,以及会话和进程组中对于所有成员的引用的设计可能会造成不一致。比如我们在移除一个进程的时候,需要将这个进程从其父进程的子进程表中删除,还需要将其从进程组和会话的成员列表中删除。同时在添加进程的时候要注意把这个进程加到这些表里。我们在这些过程当中有多个位置都要注意,一不小心就会导致内核崩溃。想到的一个解决办法就是用侵入式链表改良,将这几个过程合起来,降低复杂性。
|
|
|
+
|
|
|
+还需要实现`clone`系统调用,用于实现 *POSIX* 标准中的线程。
|