I tend to disagree that it is the system, not the programmer that does the communicating. I don't disagree that the system can initiate and deliver a signal without a user, but that certainly isn't the only way. While it is ultimately the system that delivers the signal, a user can most certainly invoke the signal. If I hit ctrl-C while running a program, I am intentionally sending it a signal. If I type kill -9 <pid> from the command line, I am sending it a signal. Perl even has
kill which can deliver a signal at the programmer's whim (with all the caveats outlined in
perlport).
I don't disagree that it is a very limited form of communication, but I prefaced my comment with how hard it was to give a concise answer without knowing the background of the person asking the question. I went on to give a reference where more could be asked.
I appreciate the comment but I don't believe it does any more to help someone understand signals without knowing how much they already know.