您好,欢迎访问一九零五行业门户网

PHP借用$cmd运行程序后,怎么关闭

php借用$cmd运行程序后,如何关闭?
我想用php运行某exe程序(不要cron等计划程序,php里还有其他内容。这里方便测试,以记事本为例),在其打开3秒后,执行关闭。
如何操作?
是否可以调用任务管理器将其关闭?求解决代码。谢谢。
php code
------解决方案--------------------
php code
------解决方案--------------------
popen ― 打开进程文件指针
说明
resource popen ( string $command , string $mode )
打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。此指针可以用于 fgets(),fgetss() 和 fwrite()。
如果出错返回 false。
note:
如果需要双向支持,使用 proc_open()。
example #1 popen() 例子
note:
如果未找到要执行的命令,会返回一个合法的资源。这看上去很怪,但有道理。它允许访问 shell 返回的任何错误信息:
&1', 'r');
echo '$handle'; . gettype($handle) . \n;
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>
------解决方案--------------------

探讨
php code
------解决方案--------------------
popen返回的是notepad.exe在php环境下的进程指针,这个指针只能用于读取和输出数据给notepad,pclose关闭的只是这个指针而不是notepad本身.
我也不清楚如何关闭notepad,但是我想应该从windows的编程基础中查找如何获取任务管理器中的进程,然后用system函数去调用windows的关闭程序
------解决方案--------------------
popen是单向的,用proc_open吧
试试看
php code/** * windows only */$descriptorspec = array( 0 => array(pipe, r), 1 => array(pipe, w));$cwd = 'c:\windows\system32';$process = proc_open('notepad.exe', $descriptorspec, $pipes, $cwd);$s = proc_get_status( $process );//得到的信息都是父进程cmd.exe的状态,而非子进程notepad.exe的.所以不能直接kill掉这个process idsleep( 3 );exec('taskkill /pid '.$s['pid'] . ' /t'); //树型删除,删除所有父进程与对应的子进程.原来以为子进程id必定大于父进程,写了一通代码,后来发现不是,且找到了这个命令proc_close( $process );

其它类似信息

推荐信息