Answer 1
New versions of the init man page taken from the sysvinit package
are saying that usage of SIGPWR is discouraged, since /dev/initctl
control channel is the preferred way of communication.
Answer 2
The name of the game is portability. Not everyone’s init handles
that kind of signalling gracefully. What’s more, some admins
might want to do things differently even if they have that kind of
init running.
So, to be compatible, upsmon just invokes a shell command. If you
want to use init’s SIGPWR stuff, just put the right "kill" line in
a shell script and make your upsmon call it. Everyone wins.