I'm taking a FreeBSD course and am reading the implementation of system call kill(2).
http://fxr.watson.org/fxr/source/kern/kern_sig.c?v=FREEBSD82#L1687
Part of the code:
1717 switch (uap->pid) {
1718 case -1: /* broadcast signal */
1719 return (killpg1(td, uap->signum, 0, 1, &ksi));
1720 case 0: /* signal own process group */
1721 return (killpg1(td, uap->signum, 0, 0, &ksi));
1722 default: /* negative explicit process group */
1723 return (killpg1(td, uap->signum, -uap->pid, 0, &ksi));
1724 }
1725 /* NOTREACHED */
1726 }
1) Is the pid manually set to 0 and -1 to indicate a process group or sth when calling the system call?
2) why does "signum" get involved?
3) how to understand the code that kills a single process? What does the code do?
I might be asking very stupid questions but please help.