   #PHP Manual Function Reference pg_update pcntl_exec

   PHP Manual
   Prev  Next
   ______________________________________________________________________

LXXXIV. Process Control Functions

Introduction

   Process Control support in PHP implements the Unix style of process
   creation, program execution, signal handling and process termination.
   Process Control should not be enabled within a webserver environment
   and unexpected results may happen if any Process Control functions are
   used within a webserver environment.

   This documentation is intended to explain the general usage of each of
   the Process Control functions. For detailed information about Unix
   process control you are encouraged to consult your systems
   documentation including fork(2), waitpid(2) and signal(2) or a
   comprehensive reference such as Advanced Programming in the UNIX
   Environment by W. Richard Stevens (Addison-Wesley).

   PCNTL now uses ticks as the signal handle callback mechanism, which is
   much faster than the previous mechanism. This change follows the same
   semantics as using "user ticks". You use the declare() statement to
   specify the locations in your program where callbacks are allowed to
   occur. This allows you to minimize the overhead of handling
   asynchronous events. In the past, compiling PHP with pcntl enabled
   would always incur this overhead, whether or not your script actually
   used pcntl.

   There is one adjustment that all pcntl scripts prior to PHP 4.3.0 must
   make for them to work which is to either to use declare() on a section
   where you wish to allow callbacks or to just enable it across the
   entire script using the new global syntax of declare().

     Note: This extension is not available on Windows platforms.

Requirements

   No external libraries are needed to build this extension.

Installation

   Process Control support in PHP is not enabled by default. You have to
   compile the CGI or CLI version of PHP with --enable-pcntl
   configuration option when compiling PHP to enable Process Control
   support.

     Note: Currently, this module will not function on non-Unix
     platforms (Windows).

Runtime Configuration

   This extension has no configuration directives defined in php.ini.

Resource Types

   This extension has no resource types defined.

Predefined Constants

   The following list of signals are supported by the Process Control
   functions. Please see your systems signal(7) man page for details of
   the default behavior of these signals.

   WNOHANG (integer)

   WUNTRACED (integer)

   SIG_IGN (integer)

   SIG_DFL (integer)

   SIG_ERR (integer)

   SIGHUP (integer)

   SIGINT (integer)

   SIGQUIT (integer)

   SIGILL (integer)

   SIGTRAP (integer)

   SIGABRT (integer)

   SIGIOT (integer)

   SIGBUS (integer)

   SIGFPE (integer)

   SIGKILL (integer)

   SIGUSR1 (integer)

   SIGSEGV (integer)

   SIGUSR2 (integer)

   SIGPIPE (integer)

   SIGALRM (integer)

   SIGTERM (integer)

   SIGSTKFLT (integer)

   SIGCLD (integer)

   SIGCHLD (integer)

   SIGCONT (integer)

   SIGSTOP (integer)

   SIGTSTP (integer)

   SIGTTIN (integer)

   SIGTTOU (integer)

   SIGURG (integer)

   SIGXCPU (integer)

   SIGXFSZ (integer)

   SIGVTALRM (integer)

   SIGPROF (integer)

   SIGWINCH (integer)

   SIGPOLL (integer)

   SIGIO (integer)

   SIGPWR (integer)

   SIGSYS (integer)

   SIGBABY (integer)

Examples

   This example forks off a daemon process with a signal handler.

   Example 1. Process Control Example
   <?php
   declare(ticks=1);
   $pid = pcntl_fork();
   if ($pid == -1) {
        die("could not fork");
   } else if ($pid) {
        exit(); // we are the parent
   } else {
        // we are the child
   }
   // detatch from the controlling terminal
   if (!posix_setsid()) {
       die("could not detach from terminal");
   }
   // setup signal handlers
   pcntl_signal(SIGTERM, "sig_handler");
   pcntl_signal(SIGHUP, "sig_handler");
   // loop forever performing tasks
   while (1) {
       // do something interesting here
   }
   function sig_handler($signo) {
        switch ($signo) {
            case SIGTERM:
                // handle shutdown tasks
                exit;
                break;
            case SIGHUP:
                // handle restart tasks
                break;
            default:
                // handle all other signals
        }
   }
   ?>

See Also

   A look at the section about POSIX functions may be useful.

   Table of Contents
   pcntl_exec --  Executes specified program in current process space
   pcntl_fork -- Forks the currently running process
   pcntl_signal -- Installs a signal handler
   pcntl_waitpid -- Waits on or returns the status of a forked child
   pcntl_wexitstatus --  Returns the return code of a terminated child
   pcntl_wifexited --  Returns TRUE if status code represents a
          successful exit

   pcntl_wifsignaled --  Returns TRUE if status code represents a
          termination due to a signal

   pcntl_wifstopped --  Returns TRUE if child process is currently
          stopped

   pcntl_wstopsig --  Returns the signal which caused the child to stop
   pcntl_wtermsig --  Returns the signal which caused the child to
          terminate
   ______________________________________________________________________

   Prev      Home       Next
   pg_update  Up  pcntl_exec
