1) pid установлен вручную на 0 и -1, чтобы указать группу процессов или sth при вызове системного вызова?
- Если pid равен 0, сигналотправляется всем процессам в той же группе процессов, что и отправитель.
- Если pid равен -1, сигнал отправляется всем (включая отправителя).Для этого у отправителя должны быть права.
2) почему включается "signum"?
signum
отправляется сигнал,Есть много сигналов, которые делают разные вещи;попробуйте kill -l
.
3) как понять код, который убивает один процесс?Что делает код?
Сначала выполняется поиск процесса и возвращается ESRCH
, если он не может быть найден (например, если вы пытаетесь отправить сигнал на какой-либо несуществующий pid).
if ((p = pfind(uap->pid)) == NULL) {
if ((p = zpfind(uap->pid)) == NULL)
return (ESRCH);
}
Проверяется, разрешено ли нам сигнализировать об этом (этим сигналом):
error = p_cansignal(td, p, uap->signum);
Если нам разрешено сигнализировать об этом, pksignal (tdsignal)
отправлено.
if (error == 0 && uap->signum)
pksignal(p, uap->signum, &ksi);
Теперь нам нужно вернуться из функции, поэтому мы должны снять блокировки
PROC_UNLOCK(p);
return (error);
Я мог бы спросить оченьглупые вопросы, но, пожалуйста, помогите.
Код ядра довольно очевиден (никакие причудливые алгоритмы не используются).Единственная проблема в том, что он очень большой и вам нужно терпение.