たとえば、C:test ディレクトリと C:testtest ディレクトリに a.exe がある場合、両方のディレクトリで a.exe を実行すると、タスク マネージャーに 2 つの a.exe が表示されます。php で閉じる方法を指定します。 C: ディレクトリ a.exe たとえば、C:testtest で実行されている a.exe を閉じたい場合はどうすればよいですか
Windows は理解できません。
Linux では、プロセスを実行すると、一意の PID が割り当てられます。シェルスクリプトを使用してphpスクリプトのプロセスを子プロセスとして実行し、実行後にそれぞれのpidを取得し、killするときに関連するpidを直接killできます。
PHP 自体も、getmypid 関数を通じて現在のスクリプト プロセスの PID を取得できます。ただし、独自のプロセスを強制終了することはできないようで、それを制御するには依然としてマスター プロセスのペアが必要です。
Python についてはあまり詳しくありません。Ruby であればプログラム自体も pid を取得できますが、自分自身を強制終了することはできないようです。
最も簡単な方法は、シェルをメインの制御プロセスとして使用することです。
対応するコマンドをオペレーティング システムに発行するだけです
しかし残念ながら、PHP に十分な権限がないため実行できません
Windows は理解できません。
Linux では、プロセスを実行すると、一意の PID が割り当てられます。シェルスクリプトを使用してphpスクリプトのプロセスを子プロセスとして実行し、実行後にそれぞれのpidを取得し、killするときに関連するpidを直接killできます。
PHP 自体も getmypid 関数を通じて現在のスクリプト プロセスの PID を取得できます。ただし、独自のプロセスを強制終了することはできないようで、それを制御するには依然としてマスター プロセスのペアが必要です。
Python... Windows にも固有の PID がありますが、主な理由は、どの PID がどのディレクトリにあるプログラムに属しているかわからないことです。私がやりたいことは、プログラムを監視する監視プログラムに非常に似ています。問題がある場合は、そのディレクトリ内のプロセスを閉じますが、他のディレクトリには同じ名前のプロセスが存在します
対応するコマンドをオペレーティング システムに発行するだけです
しかし、残念なことに、次のことは可能です。 php に十分な権限がないため、これは実行できません
別のスクリプトを使用して、2 つの異なるディレクトリにあるいわゆるプログラムを起動すると、すぐに PID を取得して記録できます。しかし問題は依然として存在しており、PHP にはシステム プロセスを強制終了する権限がないようです。
Windows のバッチ処理にはあまり詳しくありません。Linux では、この主要な制御プロセスはシェル スクリプトで実行する必要があります。これは 2 つのプロセスの起動を担当し、起動直後にプロセス PID を記録し、どのディレクトリ内のプログラムに関連付けることができます。
tasklist はすべてのプロセスと対応する情報をリストします
tskill はプロセスを強制終了します
より一般的な
ntsd -c q -p PID
ただし、Web モードで実行されている PHP では絶対に実行できません
ただし、VC または VB を使用して次のように書くことはできますそれを間接的に実現するための小さなプログラム
インターネット上に関連するコードがあり、たくさん検索できます。これは一般的な要件であるためです
2 つの異なるディレクトリでいわゆるプログラムを開始するには、別のスクリプトを使用します。開始後、すぐに PID を取得して記録できます。しかし問題は依然として存在しており、PHP にはシステム プロセスを強制終了する権限がないようです。
Windows のバッチ処理にはあまり詳しくありません。Linux では、この主要な制御プロセスはシェル スクリプトで実行する必要があります。これは 2 つのプロセスの起動を担当し、起動直後にプロセス PID を記録し、どのディレクトリ内のプログラムに関連付けることができます。 これら 2 つのプロセスは管理を通じてではなく手動で開始されたため、pid を覚えていませんでした
#7 はウィンドウの下に表示されます
Linux では、ps を使用してプロセス リストを取得し、kill でプロセスを強制終了できます
もちろん、同じ文が依然として当てはまります: 十分な権限が必要です。 Web モードの php 権限が不十分です
成功しました 皆さんありがとうございます $path = array("C:test","C:testtest")
exec("wmic process where name='a.exe 'get実行可能パス,プロセスID", $result, $return);
if($return != 0)
return;
foreach ($result as $rows)
{
$data = preg_split("/ +/", $ rows) ;
if(in_array($data[0],$path))
{
system("ntsd -c q -p ".$data[1], $return1);
if($return1 == 0 )
echo "閉じる成功";
else
echo "閉じる失敗"
}
}
;