CHAPTER 16 - Parsing Command-Line Options - Signals

26 views

In UNIX, signals are a basic mechanism to pass messages
between processes. They enable processes to tell each other that some type of
event has just occurred. This type of event is the only information passed to
basic UNIX signal handlers. There is another signal-handling mechanism
called “sigaction” in which signal handlers receive more information, but PHP
signals are based on the former, basic form. For example, if the user presses
Ctrl-c to stop a command-line program, the program receives an interrupt sig-
nal, called SIGINT.
In PHP, you can set up a function to handle one or more signals with the
pcntl_signal() function, like this:
<?php
function sigint_handler($signal) {
print “Interrupt!\n”;
exit;
}
pcntl_signal(SIGINT, “sigint_handler”);
declare (ticks = 1) {
while (sleep(1));
}
?>
This script sleeps until you terminate it. If you do press Ctrl-c, it prints
Interrupt! and exits. You could change this example to ignore Ctrl-c com-
pletely by changing the signal-handler function to the predefined SIG_IGN:
pcntl_signal(SIGINT, SIG_IGN);
You may change a signal handler anytime, including inside a signal-
handling function. To revert to the default signal handler, use SIG_DFL:
pcntl_signal(SIGINT, SIG_DFL);
PHP probably supports all the signals your system supports. Try typing
kill ­l in your shell to see some. Table 16.3 lists of signals that may be useful
from PHP, either catching and handling them, or sending them to (killing)
other processes.

Table 16.3
Signal

Description
SIGHUP
Hangup. Used to notify when terminal connection is lost.
SIGINT
Interrupt. Send when user hits the interrupt (Ctrl-c) key.
SIGABRT
Sent by the abort() C function; used by assert().
SIGKILL
Non-graceful termination of the process; cannot be caught.
SIGUSR1
User-defined signal 1.
SIGSEGV
Segmentation fault; in some operating systems, it’s known as General Protec-
tion Failure.
SIGUSR2
User-defined signal 2.
SIGPIPE
Sent when a pipe the process is reading closes unexpectedly.
SIGALRM
Sent when an alarm times out.
SIGTERM
Terminate process normally.
SIGCHLD
A child process just died or changed status.
SIGCONT
Continue after stopping with SIGSTOP.
SIGSTOP
Halt process; cannot be caught.
SIGTSTP
Halt process; may be caught.
SIGTTIN
Process stopped due to tty input.
SIGTTOU
Process stopped due to tty output.
SIGCXPU
CPU time limit exceeded.
SIGXFSZ
File size limit exceeded.
SIGBABY
Passed when a baby is ready to change diapers, hungry, about to climb some-
thing dangerous or doing anything else that requires immediate attention from
a parent PHP programmer.



« CHAPTER 16 - Parsing Command-Line Options - Exec CHAPTER 16 - Parsing Command-Line Options - Examples »
Posted on Thursday, June 7th, 2007 at 1:39 pm under PHP 5 Power Programming | RSS 2.0 Feed

Post Comment

You must be logged in to post a comment.



ComputerEducationWorld.com All Rights Reserved © RSS | CBSE | Education Boards Of India | What is My IP?