]> granicus.if.org Git - php/commitdiff
Add proc_terminate() function to forcibly kill off a process created
authorWez Furlong <wez@php.net>
Sat, 15 Feb 2003 17:18:57 +0000 (17:18 +0000)
committerWez Furlong <wez@php.net>
Sat, 15 Feb 2003 17:18:57 +0000 (17:18 +0000)
with proc_open().

ext/standard/basic_functions.c
ext/standard/exec.h
ext/standard/proc_open.c

index d82913aed08604cc39a93fc58004d88886dd5bf2..84192e0a25ce31c3940035d3c1868f08b00fa89e 100644 (file)
@@ -419,6 +419,7 @@ function_entry basic_functions[] = {
 #ifdef PHP_CAN_SUPPORT_PROC_OPEN
        PHP_FE(proc_open,                               third_arg_force_ref)
        PHP_FE(proc_close,                                                                                                              NULL)
+       PHP_FE(proc_terminate,                                                                                                  NULL)
        PHP_FE(proc_get_status,                                                                                                 NULL)
 #endif
 
index cdfe8a54ed9ebe84a4dd7da22f800f1f1ae19263..796701317f4d8c08fc78a9f633280066fb8d0d81 100644 (file)
@@ -30,6 +30,7 @@ PHP_FUNCTION(shell_exec);
 PHP_FUNCTION(proc_open);
 PHP_FUNCTION(proc_get_status);
 PHP_FUNCTION(proc_close);
+PHP_FUNCTION(proc_terminate);
 PHP_MINIT_FUNCTION(proc_open);
 
 char *php_escape_shell_cmd(char *);
index 7cca8a5ac42ed46551fa1f67716811369403649e..993e8761274b4e04e5a1289d41b54bc164fc84af 100644 (file)
@@ -174,6 +174,32 @@ PHP_MINIT_FUNCTION(proc_open)
        return SUCCESS;
 }
 
+
+/* {{{ proto int proc_terminate(resource process)
+   kill a process opened by proc_open */
+PHP_FUNCTION(proc_terminate)
+{
+       zval *zproc;
+       struct php_process_handle *proc;
+       
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zproc) == FAILURE) {
+               RETURN_FALSE;
+       }
+
+       ZEND_FETCH_RESOURCE(proc, struct php_process_handle *, &zproc, -1, "process", le_proc_open);
+       
+#ifdef PHP_WIN32
+       TerminateProcess(proc->child, 255);
+#else
+       kill(proc->child, SIGTERM);
+#endif
+       
+       zend_list_delete(Z_LVAL_P(zproc));
+       RETURN_LONG(FG(pclose_ret));
+}
+/* }}} */
+
+
 /* {{{ proto int proc_close(resource process)
    close a process opened by proc_open */
 PHP_FUNCTION(proc_close)