检测Windows进程和应用程序是否正在运行
我正在调查是否有一种方法可以通过程序检查某个过程是否作为一个过程(在运行EXE的列表中)和作为开放应用程序(即在任务栏上)并根据结果采取行动. 另外 - 是否有办法杀死流程或运行应用程序? 我们正在该服务器上运行WAMP应用程序,因此理想情况下,我希望使用PHP进行此操作,但是对任何最有效的方法都开放. 有建议吗? 解决方案 检查某个过程是否作为过程运行 如果您有任务列表命令,请确保: // show tasks, redirect errors to NUL (hide errors) exec("tasklist 2>NUL", $task_list); print_r($task_list); 然后,您可以通过匹配/从行中匹配/提取任务名称来杀死它. exec("taskkill /F /IM killme.exe 2>NUL"); 我在PHP-CLI中使用了很多.示例: // kill tasks matching
0 2023-06-01
编程技术问答社区
Symfony进程 - 执行命令
如何运行命令(app/console execute:my:命令) 在通过新过程的服务中? 我尝试这个: use Symfony\Component\Process\Process; use Symfony\Component\Process\Exception\ProcessFailedException; $process = new Process( 'app/console execute:my:command' ); $process->start(); 但是什么都没有发生... 如果我通过终端手动称其为手动: app/console execute:my:command 我在做什么错? 编辑 - 解决方案:我们需要编写整个路径.就我而言: ($this->kernelRootDir is : %kernel.root_dir%) $processString = sprintf( 'php %s/../app/con
2 2023-05-30
编程技术问答社区
使用Symfony Process用PHP控制一个互动过程
我正在尝试控制系统 ssh-agent 通过添加新密钥使用 ssh-add .为此,我正在使用 symfony Process component. 当我从网站运行此代码时,它可以很好地工作,但是当我在shell/Console中运行相同的代码时,SSH-ADD进程挂在Enter passphrase for : 上 代码的简化版本看起来像 use Symfony\Component\Process\Process; $keyPath = ''; $keyPassword = ''; $socketPath = ''; $sshAdd = new Process( "ssh-add {$keyPath}", null, [ 'SSH_AUTH_SOCK' => $
0 2023-05-30
编程技术问答社区
使用php来触发另一个php脚本,然后忽略
我正在尝试解决该方法的方法是:我有一个PHP文件,让我们调用trigger.php运行一些PHP代码,该代码启动了其他PHP文件,我们将调用开始处理处理. 尽管trigger.php需要忽略backgroundProcess.php的情况,但它只需要启动它的处理,并且在backgroundProcess.php继续前进时会停止. edit1 我正在Windows Wampserver 2.1上运行此操作,因此必须是Windows命令. edit2 通过以下命令解决了它,这要归功于Jakenoble的建议: exec("C:\wamp\bin\php\phpVERSION_NUMBER\php.exe -f C:\wamp\www\path\to\backgroundProcess.php"); 解决方案 您可以使用exec()并在呼叫末端添加&,以及输出流: trigger.php exec("php backgroundProces
0 2023-05-30
编程技术问答社区
优化foreach中的while和SQL
我的代码: $text = '12-name-y-86'; $array = explode('-',$text); foreach($array as $value) { $sql = mysql_query("SELECT * FROM `table` WHERE `pid`='$value' ORDER BY `id` LIMIT 3"); echo '***'.$value.'***'; echo ' '; while($row = mysql_fetch_array($sql)) { echo $row['title']; echo ' '; } echo ' '; } 打印: 12 title1 title2 title3 名称 ti1 ti2 ti3 y tle1 tle
0 2023-05-29
编程技术问答社区
如何跟踪php函数/代码的处理期限
我正在开发基于浏览器的游戏,我想知道哪些功能需要最多的处理时间,依此类推. 你们中的任何人都知道我可以做什么吗?使用PHP 5.3 解决方案 听起来您想要 xhprof .它在分析方面表现出色. 其他解决方案 有一个 xdebug中的Profiler . 其他解决方案 还有一个叫做 php apd
0 2023-05-29
编程技术问答社区
如何找出特定过程仍在PHP中运行
我正在编写一个脚本,该脚本构建了其他脚本的队列,并且应该管理其启动.经理脚本应该知道哪个子进程已经完成,因此它可以启动其他等待的脚本. 我添加了一个"&echo $!"获取每个子过程的过程ID.因此,我有我的孩子流程流程ID,目前正在使用系统" PS"程序调用以查找子进程是否仍在运行. 问题是我的脚本当前仅在类似Unix的系统中运行.我不知道如何在Windows中获取孩子的PID,并且我的脚本还没有解析" Taskslist"命令在Windows中的输出. 还有其他方法可以实现这一目标吗?是否有PHP解决方案可以查找子过程是否仍在运行?一个启动其他过程(非阻止)的解决方案,并检查它们是否仍在运行. 解决方案 您可以找到手册中的评论,这表明我想到com-objects. 其他解决方案 您可以做的是创建一个数据库或文件,以保留您的流程ID.每个过程都会在文件或DB中写下他的PID(过程ID). 使用此方法获取您的PHP PID: getmypid();
2 2023-05-29
编程技术问答社区
如何用PHP获得服务器上运行的PHP进程列表
我有一个运行PHP文件的cronjob,该文件运行使用PHP编写的守护程序,但是我只想在没有其他实例运行的情况下运行守护程序,我如何获得运行的PHP流程列表以进行运行以进行运行查找我的守护程序是否在运行.我考虑了某种将生成可以存储在数组中的列表的Exec.有任何想法吗?谢谢 解决方案 要获取PHP流程列表,请参阅此问题: 如何获取运行PHP的列表使用php exec()? 的脚本 另一个选项是您可以获取文件的锁,然后在运行之前对其进行检查: 例如: $thisfilepath = $_SERVER['SCRIPT_FILENAME']; $thisfilepath = fopen($thisfilepath,'r'); if (!flock($thisfilepath,LOCK_EX | LOCK_NB)) { customlogfunctionandemail("File is Locked"); exit(); } elseif(flock($this
0 2023-05-28
编程技术问答社区
PHP proc_open是否阻止了Web请求?
默认情况下,在linux上,是否通过proc_open()创建一个过程,使php脚本直到产卵过程终止才终止?我不想要它,然后立即关闭过程. proc_open本身没有阻止,这已经足够清楚.但是,总体HTTP请求执行呢? 解决方案 我在周末有一些时间,所以我对 *nix Systems上的proc_open()进行了一些研究. proc_open()即使在背景php中未运行shell脚本,也不会阻止PHP的脚本执行.如果您不自己调用,则在PHP的脚本完全执行后自动调用proc_close().因此,我们可以想象,在脚本末尾,我们始终与proc_close()有一条线. 问题在于毫无意义,但逻辑proc_close()行为.让我们想象我们有一个脚本: $proc = proc_open('top -b -n 10000', array( array('pipe', 'r'),
0 2023-05-28
编程技术问答社区
PHP:exec()即使在">/dev/null 2>&1 &"下也不会在后台运行。
我在我的php脚本中称其为: exec("gutschein.php >/dev/null 2>&1 &"); 调用脚本(生成pdf并通过电子邮件发送它)可行,但是该过程是在后台不运行(我在gutschein.php中使用睡眠语句进行了检查).浏览器悬挂在执行gutschein.php之前. 我还检查了以下内容: exec("/usr/bin/php gutschein.php >/dev/null 2>&1 &"); 或 shell_exec("/usr/bin/php gutschein.php >/dev/null 2>&1 &"); 它不会改变任何东西.该脚本实际上是在Linux服务器上运行的.有人知道我做错了什么吗? 解决方案 尝试系统和/或通行.我以前遇到了Exec的问题,因为它停止了试图用数据填充返回数组直到过程完成为止. . 这些都会呼应原始输出,因此即使它们正常工作,您可能需要使用丢弃的输出缓冲区来处理
0 2023-05-28
编程技术问答社区
在*nix中,什么原因导致top命令中的 "睡眠"?
是什么导致我在top中看到的这些过程?如果我要调用php的sleep()函数,这会添加到我在top中看到的sleeping计数吗?在sleeping中拥有很高的数字是否有缺点? 解决方案 过程被阻止时正在睡觉,等待某件事.例如,它可能已经调用read(),并且正在等待数据从网络流到达. sleep()确实是让您的过程睡一会儿睡眠的一种方法.但是,睡觉是除大量计算的过程中所有的正常状态 - 睡眠本质上是一个过程当该过程不做其他任何事情时所做的事情.这是您大多数流程睡觉的正常情况 - 如果不是 ,则倾向于表明您需要更多的CPU马力. 其他解决方案 睡眠过程就像悬浮过程. 一个过程在: 时睡觉 它正在执行I/O操作(I/O的阻塞) 当您命令睡觉时() 任何过程的状态都可以: 准备就绪:当它准备好执行并且在队列中等待处理器调用特定优先级 睡觉:当它运行并为I/O操作被阻止或执行睡眠时() 运行:当处理器执行一个过程时,它将开始运行. 状态
0 2023-05-28
编程技术问答社区
同页处理
如何使用单独的进程页面在同一页面上处理表单.现在要进行注册,评论提交等,我使用第二页来验证数据,然后提交并将其路由回到home.php.我该如何做到这一点,以便在提交时,页面本身会验证而不是使用第二页. 解决方案 您可以告诉表格提交给PHP的自我,然后检查$_POST变量以进行表单处理.此方法非常适合进行错误检查,因为您可以设置错误,然后将表单重新加载带有以前提交的任何信息(即他们不会丢失提交的信息). 单击"提交"按钮时,它将将信息发布到同一页面,并在顶部运行PHP代码.如果发生错误(基于您的检查),则该表单将为用户重新加载,其中显示了错误以及用户在字段中提供的任何信息.如果没有发生错误,您将显示一个确认页面而不是表格.
0 2023-05-27
编程技术问答社区
nohup:在后台运行PHP进程
我尝试在后台运行PHP进程,并从PHP文件启动此操作. 一些信息:PHP版本5.2.17,PHP Seaf_Mode关闭,Linux系统.我从EXEC启动该过程,尝试已经尝试了Shell_exec.我将所有文件设置为0755,0777. $pid = exec("nohup $cmd > /dev/null 2> /dev/null & echo $!"); 如果我打印此语句,我会得到这个,而PID还可以: nohup /usr/local/bin/php5 /.../../file.php > /dev/null 2> /dev/null & echo $! 如果我在 的SSH下寻找过程 top 我看到了我的PHP5过程,具有正确的PID.用户是root PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2 2023-05-27
编程技术问答社区
在PHP中启动一个新进程/线程的最简单方法
方案: 共享托管,因此没有能力安装新扩展 + no cron 提交的请求需要执行一些繁重的流程. 我希望对客户的答案尽可能快地走,繁重的举重可以立即继续,但不要阻止客户. 可以在新线程上(如果可能的话)也没有问题. 最好的方法是什么? 解决方案 *nix: exec('/path/to/executable > /dev/null 2>&1 &'); 在Windows上: $WshShell = new COM('WScript.Shell'); $oExec = $WshShell->Run('C:\path\to\executable.exe', 0, false); 这两个都将产生一个新的过程,该过程将与父母完全断开A的同步.只要您的主机允许您这样做. 其他解决方案 您可以通过键进行Google:PHP关闭连接后继续处理. 与您的问题有关的以下链接是: 关闭连接后继续处理 /features.connecti
0 2023-05-27
编程技术问答社区
为每个网页的请求创建新的程序?
这可能是一个基本问题,但是每次用户从服务器调用PHP文件时,它是否从该服务器创建新的过程? 例如,我有一个基本表单(例如,在index.php上),将文本提交给另一个PHP文件. 在该php文件中,我打印 posix_getpid(). 我在两个选项卡中打开了我的index.php an填写并提交了文字,我最终得到了 每个选项卡上的两个不同的PID. 这使我得出这样的结论:服务器可能为每个脚本创建一个新的过程. 我是吗? 欢呼! 解决方案 我假设您正在将Apache作为Web服务器运行. 当请求进来时,Apache启动了一个新线程.然后在此新线程上调用PHP,因此为什么您每次都会获得新的进程ID. 当然,这是大大简化的. 我建议阅读此文章,以深入了解. 编辑:似乎平台之间的过程有所不同.它按照我在Windows上描述的方式工作,但是在Unix上执行了多个Apache进程. 其他解决方案 有多种方法可以使用PHP链接Web服务
0 2023-05-27
编程技术问答社区
如何在不从PHP调用ps的情况下检查指定的PID当前是否在运行?
我们想检查当前是否通过PHP运行指定的过程. 我们想简单地提供PID,看看它当前是否正在执行. PHP是否具有内部功能,可以为我们提供此信息,或者我们必须从" PS"输出中解析它? 解决方案 如果您在Linux上,请尝试以下操作: if (file_exists( "/proc/$pid" )){ //process with a pid = $pid is running } 其他解决方案 posix_getpgid($pid);当进程未运行 时,将返回false 其他解决方案 如果您想拥有一个功能,则: $running = posix_kill($pid,0); 使用过程标识符PID将信号信号发送到该过程. 呼叫 posix_kill 带有0杀伤信号的 C2>如果该过程正在运行,false否则.
0 2023-05-27
编程技术问答社区
escapeshellarg和escapeshellcmd之间有什么区别?
PHP具有2个密切相关的功能, escapeshellarg() 和 escapeshellcmd() .他们俩似乎都做类似的事情,即帮助使字符串更安全地用于system()/exec()/etc. 我应该使用哪一个?我只想能够获取一些用户输入并在其上运行命令,而不是所有的爆炸.如果PHP具有绕过弹壳的一系列字符串(如ARGV)的exec-type功能,我会使用它.类似于Python的 subprocess.call() function. 解决方案 来自 Escapeshellarg()添加单报价 在弦周围并引用/逃脱任何 现有的单引号允许您 直接传递绳子到外壳 功能并将其视为 单个安全的论点. eScapeshellarg顾名思义,用作传递壳参数.例如,您要列出当前目录, $dir = "."; system('ls '.escapeshellarg($dir)); escapeshellcmd('ls $dir'); 两者都做类似的事情,并且仅取决于
6 2023-05-26
编程技术问答社区
php在后台exec()函数中
我制作了此脚本以测试PHP作为背景过程的执行 foreach($tests as $test) { exec("php test.php ".$test["id"]); } 如 php Process Background and 如何添加大量的事件通知通过Google日历API使用PHP?和 php过程 但是,该脚本的运行速度并不比全部在一个脚本中的脚本更快,而没有添加test.php. 我在做什么错? 预先感谢! 解决方案 exec()将阻塞直到您执行的过程完成为止 - 在其他单词中,您基本上将您的" test.php"作为子例程作为子例程.至少您需要向命令行参数添加&,这将使该exec()'d进程进入背景: exec("php test.php {$test['id']} &");
0 2023-05-26
编程技术问答社区
检查进程是否仍在运行?
作为构建穷人的看门狗的一种方式,并确保在崩溃时重新启动应用程序(直到我弄清楚原因),我需要编写一个由Cron运行的PHP CLI脚本,该脚本每5MN运行一次才能检查该过程是否仍在运行. 基于此页面,我尝试了以下代码,但是它总是即使我使用伪造的数据来返回True: function processExists($file = false) { $exists= false; $file= $file ? $file : __FILE__; // Check if file is in process list exec("ps -C $file -o pid=", $pids); if (count($pids) > 1) { $exists = true; } return $exists; } #if(processExists("lighttpd")) if(processExists("dummy"))
4 2023-05-26
编程技术问答社区
在PHP中运行具有实时输出的进程
我正在尝试在网页上运行一个过程,该过程将实时返回其输出.例如,如果我运行" ping'过程在我的网页上输出).可以在PHP中执行此操作吗? 我还想知道,当某人离开页面时,杀死这种过程的正确方法是什么.在" ping"过程的情况下 解决方案 这对我有用: $cmd = "ping 127.0.0.1"; $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a pipe that the child will write to ); flush(); $process = proc
0 2023-05-25
编程技术问答社区