summaryrefslogtreecommitdiff
path: root/ext/standard/proc_open.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/proc_open.c')
-rw-r--r--ext/standard/proc_open.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c
index 7cca8a5ac4..993e876127 100644
--- a/ext/standard/proc_open.c
+++ b/ext/standard/proc_open.c
@@ -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)