私が現在使用している、ひどく欠陥のある方法は次のとおりです。
tasklist /FI "WINDOWTITLE eq BLABLABLA" /NH
上記の BLABLABLA の部分は、現在の正確なプロセス タイトルです。(独自の引用符がないため、簡単に/適切にエスケープ/保護できないという事実については、言及すらしません。)
これの問題は、プロセス タイトルが 1 文字でも異なると、このロジックに従って別のスクリプトとみなされることです。たとえば、次のようなあらゆる種類の役立つヒントを常にウィンドウ/プロセス タイトルに追加しています。
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"