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

12 次查看(过去 30 天)

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

system('myprogram.exe');

 

采纳的回答

MathWorks Support Team
MathWorks Support Team 2024-4-9,0:00
現時点ではプロセスの 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!