Sending a Signal
Problem
You want to send a signal to a process. This could be sent to your own process or to another on the same system. For instance, you caught SIGINT and want to pass it on to your children.
Solution
Use kill
to send a signal by name or number to the
process IDs listed in the remaining arguments:
kill 9 => $pid; # send $pid a signal 9 kill -1 => $pgrp; # send whole job a signal 1 kill USR1 => $$; # send myself a SIGUSR1 kill HUP => @pids; # send a SIGHUP to processes in @pids
Discussion
Perl’s kill
function is an interface to the
system call of the same name. The first argument is the signal to
send, identified by number or by name; subsequent arguments are
process IDs to send the signal to. It returns the count of processes
successfully signaled. You can only send signals to processes running
under the same real or saved UID as your real or effective
UID—unless you’re the superuser.
If the signal number is negative, Perl interprets remaining arguments
as
process group IDs and sends that
signal to all those groups’ processes using the
killpg
(2) system call.
A process group is essentially a job. It’s how the operating system ties related processes together. For example, when you use your shell to pipe one command into another, you’ve started two processes, but only one job. When you use Ctrl-C to interrupt the current job, or Ctrl-Z to suspend it, this sends the appropriate signals to the entire job, which may be more than one process.
kill
can also check whether ...
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.