我目前使用的非常有缺陷的方法是:
tasklist /FI "WINDOWTITLE eq BLABLABLA" /NH
上面的 BLABLABLA 部分是当前确切的进程标题。(甚至不要让我开始说它没有自己的引号,因此无法轻松/正确地转义/保护。)
问题在于,只要进程标题相差一个字符,按照这个逻辑,它就会被视为不同的脚本。例如,我经常在窗口/进程标题中添加各种有用的提示,例如:
Actual title (5 seconds left...)
和:
[FINISHED] Actual title
和:
Actual title (4 / 9 items left)
和:
Actual title (35% downloaded)
等等。你明白我的意思了。进程标题经常变化,因此它对于检查唯一脚本来说并不可靠。
我发现的唯一其他方法是引用他们称之为“IMAGENAME”的东西(显然意味着“可执行名称”):
tasklist /FI "IMAGENAME eq php.exe" ...
这当然更糟因为它只会列出任何 php.exe 脚本!
我对“tasklist”命令的实验(使用--verbose输出并阅读其手册)并没有发现任何关于文件路径或任何唯一的每个文件id或类似内容的提及。
为什么它不让我做这样的事?
tasklist /FI "FILEPATH eq BLABLABLA" /NH
?
我曾想过自己在数据库中跟踪正在运行的脚本,但当事情没有完全按照计划进行时,这种方法似乎效率极低,而且不可靠。使用操作系统提供的命令绝对是最好的选择(除非 PHP 内置了该命令)。
我知道“eq”过滤器接受星号在最右边,但由于上述原因,这对我没有帮助。
我是否真的别无选择,只能坐下来分析完整的任务列表输出,并尝试删除进程标题的任何“动态”部分,以便我可以计算出具有与运行代码的脚本“相同”进程标题的正在运行的脚本的数量?这感觉非常黑客和愚蠢。它不能是正确的方式……
(PS:你知道,我一直一次又一次地感到困惑,到底有多少“显而易见的”(显然只对我而言)东西和功能缺失了。Windows 和 Linux 上的情况都一样。我认为是“最低限度”的东西不知何故被其他人认为是多余的/无用的。这真的让我很疑惑...)
答案1
您可以使用以下方法优化结果:
tasklist /fi "imagename eq php.exe" /v | find /i "Actual title"