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 CenterFile Exchange에서 PID コントローラーの調整에 대해 자세히 알아보기

제품


릴리스

R2017b

Community Treasure Hunt

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

Start Hunting!