Perl Cd Bookshelf [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Cd Bookshelf [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید



16.14. Sending a Signal


16.14.1. 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.

16.14.2. 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

16.14.3. Discussion


Perl's kill function is an interface to the
syscall 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) syscall.

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 a process is alive.
Sending the special pseudo-signal number 0 checks whether it's legal
for you to send a signal to the process—without actually
sending one. If it returns true, the process is still alive. If it
returns false, the process either has changed its effective UID (in
which case $! will be set to EPERM) or no longer
exists (and $! is ESRCH). Zombie processes (as
described in
Recipe 16.19) also report back as
ESRCH.

use POSIX qw(:errno_h);
if (kill 0 => $minion) {
print "$minion is alive!\n";
} elsif ($! = = EPERM) { # changed uid
print "$minion has escaped my control!\n";
} elsif ($! = = ESRCH) {
print "$minion is deceased.\n"; # or zombied
} else {
warn "Odd; I couldn't check on the status of $minion: $!\n";
}

16.14.4. See Also


The "Signals" sections in Chapter 16 of Programming
Perl
and in perlipc(1); your
system's sigaction(2),
signal(3), and kill(2)
manpages (if you have them); the kill function in
Chapter 29 of Programming Perl and
perlfunc(1)



16.13. Listing Available Signals16.15. Installing a Signal Handler




Copyright © 2003 O'Reilly & Associates. All rights reserved.

/ 875