Windowsプラットフォームで "system" コマンドによって作成されたプロセスの PID を取得するにはどうすればよいですか?
12 次查看(过去 30 天)
显示 更早的评论
MathWorks Support Team
2024-4-9,0:00
回答: MathWorks Support Team
2024-4-9,3:45
Windowsプラットフォームで "system" コマンドによって作成されたプロセスの PID を取得するにはどうすればよいですか?
system('myprogram.exe');
采纳的回答
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 个评论
更多回答(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!