Windowsプラットフォームで "system" コマンドによって作成されたプロセスの PID を取得するにはどうすればよいですか?

5 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2024 年 4 月 9 日
回答済み: MathWorks Support Team 2024 年 4 月 9 日

Windowsプラットフォームで "system" コマンドによって作成されたプロセスの PID を取得するにはどうすればよいですか?

system('myprogram.exe');

 

採用された回答

MathWorks Support Team
MathWorks Support Team 2024 年 4 月 9 日
現時点ではプロセスの PID を直接取得する方法は提供されていません。すでに機能拡張に関するフィードバックが開発チームに転送されており将来のリリースでの実装が検討される可能性があります。
Windowsでは、いくつかの代替方法があります。
1. 以下で名前に "MATLAB" を含むプロセスを表示することができます。
>> !tasklist |findstr -i "MATLAB"
 「MATLAB」を任意の exe 名に変更すると、その exe のPIDが表示されます。
2. 以下で MATLAB の子プロセスの PID を取得できます。
>> system(sprintf('wmic process where (ParentProcessId=%d) get Caption,ProcessId', feature( 'getpid' )))
.
3. 応用例として、MATLAB によって開かれたコマンド ライン シェルの正確な PID を見つけることができます。
% For example, launch batchfile from MATLAB
system('batchfile.bat &');
% Get PID of CMD shell
batFileName = 'batchfile.bat';
matlabpid = num2str(feature('getpid'));
query = ['wmic process where "name=''cmd.exe'' and parentprocessid=' matlabpid ' and commandline like ''%%cmd /D /k \"' batFileName '\"%%''" get processid /format:list'];
[~,batpidquery] = system(query);
batpid = regexp(batpidquery, '\d+', 'match', 'once');
% Use the PID to terminate the process
[a,b] = system(['taskkill /F /PID ' batpid]);
 
このコードのポイントは、MATLAB の親 PID と MATLAB によって発行されたコマンド (この場合はバッチ ファイル名) によって起動されたcmd.exeプロセスを識別することです。
たとえば、MATLAB の PID が 8420 であると仮定すると、次のシステム コマンドを使用して、MATLAB によって開かれた CMD シェルの PID を取得します。
"name='cmd.exe' and parentprocessid=8420 and commandline like '%%cmd /D /k \"batchfile.bat\"%%'" get processid /format:list
上記はWindows10でテストされています。
ご参考:

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangePID コントローラーの調整 についてさらに検索

製品


リリース

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!