Some signals are delivered to a process by hardware - e.g. float point exceptions.
But the kernel and any user process can send a signal to another process or to a process group provided the user has privilege to do so.
#include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig);
A process can even send a signal to itself:
kill( getpid(), SIGSTOP);