diff options
author | Jason Greene <jason@php.net> | 2001-06-12 08:54:25 +0000 |
---|---|---|
committer | Jason Greene <jason@php.net> | 2001-06-12 08:54:25 +0000 |
commit | 8b43f3222ec7a2956568cd6da055afac89fd3b87 (patch) | |
tree | 09ec0cdeb60f4491efceb4549f34bd401891f8a9 /ext/pcntl/php_signal.c | |
parent | 3186994df105eafbf292d15187703b654431263b (diff) | |
download | php-git-8b43f3222ec7a2956568cd6da055afac89fd3b87.tar.gz |
@Added new experimental module pcntl (Process Control) (Jason)
Initial Import
Diffstat (limited to 'ext/pcntl/php_signal.c')
-rw-r--r-- | ext/pcntl/php_signal.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/ext/pcntl/php_signal.c b/ext/pcntl/php_signal.c new file mode 100644 index 0000000000..a47c39bd77 --- /dev/null +++ b/ext/pcntl/php_signal.c @@ -0,0 +1,45 @@ + +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Jason Greene <jason@inetgurus.net> | + +----------------------------------------------------------------------+ +*/ + +#include "php_signal.h" + +/* php_signal using sigaction is taken verbatim from Advanced Programing + * in the Unix Environment by W. Richard Stevens p 298. */ +Sigfunc *php_signal(int signo, Sigfunc *func) +{ + + struct sigaction act,oact; + act.sa_handler = func; + sigemptyset(&act.sa_mask); + act.sa_flags = 0; + if (signo == SIGALRM) { +#ifdef SA_INTERRUPT + act.sa_flags |= SA_INTERRUPT; /* SunOS */ +#endif + } else { +#ifdef SA_RESTART + act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */ +#endif + } + if (sigaction(signo, &act, &oact) < 0) + return SIG_ERR; + + return oact.sa_handler; +} + |