• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-23) 17次浏览 已收录 0个评论

PHP借用$cmd运行程序后,如何关闭?
我想用PHP运行某exe程序(不要CRON等计划程序,PHP里还有其他内容。这里方便测试,以记事本为例),在其打开3秒后,执行关闭。
如何操作?
是否可以调用任务管理器将其关闭?求解决代码。谢谢。

PHP code

<!---ecms Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php$cmd = 'C:\WINDOWS\system32\notepad.exe';system($cmd);sleep(3);//$cmd1 = 'C:\WINDOWS\system32\taskmgr_original.exe';//system($cmd1);?>

——解决方案——————–

PHP code

<?php$handle = popen('C:\WINDOWS\system32\notepad.exe', "r");pclose($handle);?><br /><font color='#e78608'>------解决方案--------------------</font><br />popen ― 打开进程文件指针<br /><br />说明<br />resource popen ( string $command , string $mode )<br />打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。  <br /><br />返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。此指针可以用于 fgets(),fgetss() 和 fwrite()。  <br /><br />如果出错返回 FALSE。  <br /><br />Note:  <br /><br />如果需要双向支持,使用 proc_open()。  <br /><br /><br /><br />Example #1 popen() 例子<br /><br /><?php<br />$ha<strong>*本文来@源gao@daima#com搞(%代@#码@网2</strong><pre>搞代gaodaima码

ndle = popen(“/bin/ls”, “r”);
?>

Note:

如果未找到要执行的命令,会返回一个合法的资源。这看上去很怪,但有道理。它允许访问 shell 返回的任何错误信息:

<?php
error_reporting(E_ALL);

/* 加入重定向以得到标准错误输出 stderr。 */
$handle = popen(‘/path/to/spooge 2>&1’, ‘r’);
echo “‘$handle’; ” . gettype($handle) . “\n”;
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>

——解决方案——————–

探讨

PHP code

<?php
$handle = popen(‘C:\WINDOWS\system32\notepad.exe’, “r”);
pclose($handle);
?>

——解决方案——————–
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 ); 


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP借用$cmd运行程序后,怎么关闭

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址