MCPcopy Create free account
hub / github.com/Simple-XX/SimpleKernel / CheckPendingSignals

Method CheckPendingSignals

src/task/signal.cpp:73–159  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

71}
72
73auto TaskManager::CheckPendingSignals() -> int {
74 auto* current = GetCurrentTask();
75 if (!current || !current->aux) {
76 return 0;
77 }
78
79 auto& signals = current->aux->signals;
80 if (!signals.HasDeliverableSignal()) {
81 return 0;
82 }
83
84 int signum = signals.GetNextDeliverableSignal();
85 if (signum == signal_number::kSigNone) {
86 return 0;
87 }
88
89 signals.ClearPending(signum);
90
91 klog::Debug("CheckPendingSignals: pid={} delivering signal {} ({})",
92 current->pid, signum, SignalState::GetSignalName(signum));
93
94 auto& action = signals.actions[signum];
95
96 // SIGKILL: 强制终止,无法捕获
97 if (signum == signal_number::kSigKill) {
98 klog::Info("CheckPendingSignals: pid={} killed by SIGKILL", current->pid);
99 Exit(128 + signum);
100 __builtin_unreachable();
101 }
102
103 // SIGSTOP: 强制停止,无法捕获
104 /// @todo 实现进程停止状态 (需要新的 FSM 状态 kStopped)
105 if (signum == signal_number::kSigStop || signum == signal_number::kSigTstp) {
106 klog::Info(
107 "CheckPendingSignals: pid={} received stop signal {} (not implemented)",
108 current->pid, SignalState::GetSignalName(signum));
109 return signum;
110 }
111
112 // SIGCONT: 继续(如果已停止)
113 if (signum == signal_number::kSigCont) {
114 klog::Debug("CheckPendingSignals: pid={} received SIGCONT", current->pid);
115 return signum;
116 }
117
118 if (action.handler == kSigIgn) {
119 klog::Debug("CheckPendingSignals: pid={} ignored signal {}", current->pid,
120 SignalState::GetSignalName(signum));
121 return signum;
122 }
123
124 if (action.handler == kSigDfl) {
125 char default_action = GetDefaultSignalAction(signum);
126 switch (default_action) {
127 case 'T':
128 case 'C':
129 klog::Info(
130 "CheckPendingSignals: pid={} terminated by signal {} (default)",

Callers 2

TimerHandlerFunction · 0.80
TimerHandlerFunction · 0.80

Calls 6

DebugFunction · 0.85
InfoFunction · 0.85
GetDefaultSignalActionFunction · 0.85
HasDeliverableSignalMethod · 0.80
ClearPendingMethod · 0.80

Tested by

no test coverage detected