현재 내가 사용하는 심각한 결함이 있는 방법은 다음과 같습니다.
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
?
나는 데이터베이스에서 실행 중인 스크립트를 직접 추적하려고 생각했지만 일이 계획대로 정확하게 진행되지 않으면 끔찍할 정도로 비효율적이고 신뢰할 수 없는 것 같습니다. OS에서 제공하는 명령을 사용하는 것이 가장 좋을 것입니다(PHP에 이것이 내장되어 있지 않은 한).
"eq" 필터가 별표를 허용한다는 것을 알고 있습니다.오른쪽 끝에, 하지만 위의 이유로 인해 도움이 되지 않습니다.
나는정말코드를 실행하는 스크립트와 "동일한" 프로세스 제목을 가진 실행 중인 스크립트의 수를 계산할 수 있도록 전체 작업 목록 출력을 앉아서 구문 분석하고 프로세스 제목의 "동적" 부분을 제거하려고 시도하는 것 외에 다른 선택이 없습니까? 믿을 수 없을 정도로 해킹적이고 멍청한 느낌이 듭니다. 그것할 수 없다올바른 길을 가세요...
(추신: 아시다시피, 나는 얼마나 많은 "명백한"(나에게만, 분명하게) 항목과 기능이 누락되어 있는지 계속해서 당황하고 있습니다. Windows와 Linux 모두에서 동일한 문제입니다. 제가 고려하는 사항은 다음과 같습니다. "최소한의"는 다른 사람들에게는 불필요하거나 쓸모없는 것으로 간주됩니다. 정말 궁금합니다...)
답변1
다음을 사용하여 결과를 구체화할 수 있습니다.
tasklist /fi "imagename eq php.exe" /v | find /i "Actual title"