Текущий, ужасно несовершенный метод, который я использую, таков:
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 и прочтением ее руководства) не выявили никаких упоминаний о пути к файлу или каком-либо уникальном идентификаторе файла или чем-либо подобном.
Почему он не позволяет мне сделать что-то подобное?
tasklist /FI "FILEPATH eq BLABLABLA" /NH
?
Я думал о том, чтобы самому отслеживать запущенные скрипты в базе данных, но это кажется ужасно неэффективным и ненадежным, когда что-то идет не так, как планировалось и все такое. Определенно лучше использовать команду, предоставляемую ОС (если только PHP не имеет встроенной функции).
Я знаю, что фильтр "eq" принимает звездочкув правом конце, но это мне не помогает по вышеуказанным причинам.
Я делаюДействительнонет другого выбора, кроме как сидеть и анализировать полный вывод списка задач и пытаться удалить любые «динамические» части названий процессов, чтобы я мог посчитать количество запущенных скриптов с «таким же» названием процесса, что и скрипт, запускающий код? Это кажется невероятно хакерским и глупым. Этоне могубыть правильным путем...
(P.S.: Знаете, я снова и снова прихожу в недоумение от того, как много «очевидных» (судя по всему, только мне) вещей и функций просто отсутствуют. Это касается и Windows, и Linux. То, что я считаю «абсолютным минимумом», почему-то все остальные считают излишним/бесполезным. Это действительно заставляет меня задуматься...)
решение1
Вы можете уточнить результаты, используя:
tasklist /fi "imagename eq php.exe" /v | find /i "Actual title"