2012-04-22 14:36:24 +0000 2012-04-22 14:36:24 +0000
86
86
Advertisement

実行中のプログラムのコマンドライン引数を調べるには?

Advertisement

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

Advertisement
Advertisement

回答 (7)

91
91
91
2012-12-15 17:29:14 +0000

WindowsのWMIサービスを使えば、プロセスエクスプローラを使わなくてもできます。コマンドプロンプトから以下を実行します。

WMIC path win32_process get Caption,Processid,Commandline

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

73
73
73
2012-04-22 14:39:21 +0000

これは、プロセスエクスプローラを使用して行うことができます。

プロセスの上にマウスを置くと、そのプロセスの起動に使用されたコマンドライン引数を見ることができます。

あるいは、プロセスのプロパティを開いて、そこにあるコマンドラインを確認することもできます。

41
Advertisement
41
41
2015-10-03 07:28:36 +0000
Advertisement

タスクマネージャ**を使用することでも実現できます。

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

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

  • “プロセス "タブに移動します。表示」メニューの「列の選択」を選択します。

  • "Command Line "のチェックボックスにチェックを入れてOKをクリック。(下にスクロールして探す必要があるかもしれません)

Windows 8 の場合:

  • 「詳細」タブに移動します。列のいずれかを右クリックして(例:名前、PIDなど)、「列の選択」を選択します。
  • "Command Line "のチェックボックスにチェックを入れ、OKをクリックします。(見つけるには下にスクロールしなければならないかもしれません)

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

6
6
6
2014-08-07 05:46:54 +0000

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から実行することもできます。i kill zombies with powershell ](http://dave.thehorners.com/tech-talk/windows-os/356-powershell-net-control-and-automation) やその他の powershell のトリックについても詳しく説明しています。

5
Advertisement
5
5
2018-01-27 10:39:55 +0000
Advertisement

前の答えは、プロセスがすでに実行されている場合には素晴らしいですし、すぐに終了するつもりはありません。しかし、あなたが(私がしたように)これを行う必要がある場合は、おそらくプロセスが複数回起動したり、すぐに終了したり、または長い期間で発生したログを記録したりする場合は、 プロセスモニタ を使用して、これを行う方法があります。

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

あとは、プロセスモニターを起動したままにして、ログに記録したいプロセスを起動させるために何をしても構いません。詳細」欄か「コマンドライン」欄のどちらかにコマンドライン引数が表示されます(それらの設定方法によります)。例:

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

1
1
1
2014-04-07 15:07:04 +0000

CygWinを使用している場合、Python**プロセスを起動すると、コマンドラインの例は次のようになります:

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

しかし、Process Explorerではメインのexeしか表示されません:

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

(“path. パス: [プロセスメッセージを開くエラー]” (EDIT-1参照)に注意してください)。tasklistでも同様の結果。

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

というわけで、今まで知っている唯一のトリックは、CygWin Bashシェル pgrepを介して見つけることです。

WindowsでCygWinが問題なく共存している限り、これを知っておくと便利ですし、多くのPOSIXやPythonプログラムを実行するのにも使えます。

EDIT: Windowsではタスクリストに管理者権限は必要ないようです。CygWinでは、管理者のプロセスを見ることができるようにするために管理者権限が必要になります(私にとってより論理的に思えることは、完全なコマンドラインは_パスワードのようなパラメータを内部に持つことができます)ので、CygWin Bashを elevated Administrator Modeで実行する必要があります。

EDIT-1: 管理者としてプロセスエクスプローラーを実行してもこの問題は発生しません。ご指摘ありがとうございます、@Pacerierさん。

-3
Advertisement
-3
-3
2012-11-02 04:46:45 +0000
Advertisement

runかgoto startで検索してみてください。

tasklist -m

tasklist -svc
Advertisement

関連する質問

3
19
10
28
8
Advertisement