时间:2021-07-01 10:21:17 帮助过:16人阅读
输出 stderr。 */
------解决方案--------------------
popen ― 打开进程文件指针
说明
resource popen ( string $command , string $mode )
打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。此指针可以用于 fgets(),fgetss() 和 fwrite()。
如果出错返回 FALSE。
Note:
如果需要双向支持,使用 proc_open()。
Example #1 popen() 例子
$handle = popen("/bin/ls", "r");
?>
Note:
如果未找到要执行的命令,会返回一个合法的资源。这看上去很怪,但有道理。它允许访问 shell 返回的任何错误信息:
error_reporting(E_ALL);
/* 加入重定向以得到标准错误
/** * 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 id sleep( 3 ); exec('taskkill /PID '.$s['pid'] . ' /T'); //树型删除,删除所有父进程与对应的子进程.原来以为子进程id必定大于父进程,写了一通代码,后来发现不是,且找到了这个命令 proc_close( $process );