Windowsプラットフォームで "system" コマンドによって作成されたプロセスの PID を取得するにはどうすればよいですか?
5 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2024 年 4 月 9 日
回答済み: MathWorks Support Team
2024 年 4 月 9 日
Windowsプラットフォームで "system" コマンドによって作成されたプロセスの PID を取得するにはどうすればよいですか?
system('myprogram.exe');
採用された回答
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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で PID コントローラーの調整 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!