当前位置: 代码迷 >> 综合 >> popen()函数打开进程
  详细解决方案

popen()函数打开进程

热度:17   发布时间:2023-12-09 11:47:57.0
用popen()函数打开进程上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来
把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。popen ()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,
对这种句柄只能做单一 的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则
必须调用pclose()函数来关闭 它。
例子1:
复制代码 代码如下:<?php $fp=popen("/bin/ls -l", "r"); 
?> 示例2:<?php /* PHP中如何增加一个系统用户 下面是一段例程,增加一个名字为james的用户, root密码是 verygood。仅供参考 */ $sucommand = "su --login root --command"; $useradd = "useradd "; $rootpasswd = "verygood"; $user = "james"; $user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user); $fp = @popen($user_add,"w"); @fputs($fp,$rootpasswd); @pclose($fp); ?> PHP编程中,由于代码处理的数据量太大,单个进程处理需要很长的时间,所以需要用到并发进行处理。popen命令说明:打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。使用popen结合SHELL命令也可以实现多进程并发编程。下面开始代码实现,文件a.php:<?phpfor ($i=0;$i<10;$i++){file_put_contents('./t.txt',$i,FILE_APPEND);sleep(1);}?>程序b.php:<?phpecho "start curl\n";//popen函数,参数1执行php命令(PHP的路径 需要执行的php命令文件或其他shell命令),参数2以只读方式执行命令$out = popen("/usr/local/bin/php ./a.php", "r");echo "test\n";pclose($out);echo "end curl\n";?>运行b.php:我们发现test立即被输出,而a.php仍然在执行中。10秒后,a.php执行完毕,整个程序执行结束。t.text文件中,已被写入内容。