web-dev-qa-db-ja.com

実行中のプログラムのコマンドライン引数を見つける方法は?

他のプログラムで実行されたときなど、プログラムに渡されたコマンドラインパラメータを調べるツールまたはメソッドを探しています(ランチャーアプリケーションのシナリオ)。

78
Gepard

あなたは プロセスエクスプローラ を使ってそれをすることができます。

マウスを使ってプロセスの上にカーソルを置くと、起動に使用されたコマンドライン引数が表示されます。
enter image description here

別の方法として、プロセスのプロパティを開き、そこでコマンドラインを調べることもできます。
enter image description here

70
Der Hochstapler

WindowsのWMIサービスを使用して、Process Explorerなしでそれを実行することもできます。コマンドプロンプトから次のコマンドを実行します。

WMIC path win32_process get Caption,Processid,Commandline

出力をファイルにダンプする(読みやすくする)場合は、/ OUTPUTスイッチを使用します。

WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline
84
Andy E

タスクマネージャを使うことでそれを達成することもできます。

タスクマネージャを開く(CTRL-SHIFT-ESC、CTRL-ALT-DELETEまたはその他の方法による)。

Windows 7(そしておそらくWindows XP)の場合:

  • [プロセス]タブに進みます。 [表示]メニューの[列の選択]をクリックします。
  • [コマンドライン]のチェックボックスをチェックして[OK]をクリックします。 (あなたはそれを見つけるためにスクロールしなければならないかもしれません)

Windows 8の場合:

  • [詳細]タブに進みます。任意の列(名前、PIDなど)を右クリックして[列の選択]を選択します。
  • [コマンドライン]のチェックボックスをチェックして[OK]をクリックします。 (あなたはそれを見つけるためにスクロールしなければならないかもしれません)

コマンドラインの列が現在表示されている列に追加されます。

34
Jeromy Adofo

PowerShellによる救助.

見つける:

Get-WmiObject Win32_Process -Filter "name = 'Perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\Perl\bin\Perl.exe" t/Server_PreFork.t'}

そしてボーナスとして殺します:

Get-WmiObject Win32_Process -Filter "name = 'Perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\Perl\bin\Perl.exe" t/Server_PreFork.t'} | ForEach-Object { Invoke-WmiMethod -Path $_.__Path –Name Terminate }

PowerShellから直接実行することも、システム設定がある場合はps1から実行することもできます。私は で無制限のスクリプト設定を詳しく説明します。私はPowerShell と他のPowerShellのトリックでゾンビを殺します...

5
Dave Horner

プロセスがすでに実行されていて、もうすぐ終了する予定がない場合は、以前の回答は素晴らしいものです。しかし、(私が行ったように)プロセスを複数回起動したり、すぐに終了したり、あるいは長期間にわたって発生をログに記録したりする必要がある場合は、 プロセスモニタ

基本的にはシステム内のさまざまなイベントをログに記録します。この場合は、以下に示すように、 "Process Start"イベントと監視したいプロセスの名前をフィルタリングするだけです。

enter image description here

それから、プロセスモニタを実行し続け、ログを記録したいプロセスを実行するために何でもします。 [詳細]列または[コマンドライン]列(構成方法によって異なります)にコマンドライン引数が表示されます。例えば:

enter image description here

もちろんこのようにして、作業ディレクトリやプロセスに渡された環境変数など、より関連性の高い情報を抽出することができます。結果をファイルにエクスポートするのも簡単です。

4
Sil

CygWin を使用している場合、 Python プロセスを起動すると、これはコマンドラインの例です。

c:\CygWin\bin\python2.7.exe /usr/local/bin/sudoserver.py

しかし、 Process Explorer はメインexeのみを見ます。

Process Explorer not detecting full command line of Python process

"パス:[Error opening process message]"に注意してください(EDIT-1を参照)。 tasklistと同じ結果です。

C:\>tasklist | find "python" /i
python2.7.exe                 5740 Console                    1    15.312 KB

だから、今まで私が知っている唯一のトリックは、 CygWin Bash Shell pgrepで見つけられることです。

Luis@Kenobi /cygdrive/c/
$ pgrep -f -l server.py
5740 /usr/bin/python2.7 /usr/local/bin/sudoserver.py

CygWinがWindowsで問題なく動作する限り、これを知っておくと便利です。また、これを使用して、多くのPOSIXおよびPythonプログラムを実行することができます。

編集:Windowsでは、あなたはタスクリストの管理者権限を必要としていないようです。 CygWinでは、管理者のプロセスを見ることができるようにする必要があります(私にとってより論理的に思えるもの:完全なコマンドラインはパスワードのようないくつかのパラメータinside)そのため、 CygWin Bashを 昇格 で実行する必要があります。管理者モード

編集1:あなたが管理者としてプロセスエクスプローラを実行するならば、この問題は起こりません。指摘してくれてありがとう、@Pacerier。