Shell
列印 Matlab 實例的程序 ID (PID)
為了執行我的 Matlab 腳本,我創建了一個 shell 腳本,我為其提供了兩個參數 - matlab 文件 (
$1
) 和日誌文件 ($2
) 的路徑:
nohup time matlab -some_parameters -r "run $1;exit" &>> "$2" &
當我需要殺死一個 Matlab 程序時,有時很難分辨哪個是哪個。是否有可能以某種方式將 Matlab 程序的 pid 包含在日誌文件中(即在 中
$2
)?
最後,似乎 Matlab 命令在呼叫時隨後跨越了其他程序 (JVM)。但是,有一個未記錄的函式
feature
返回正在執行的 Matlab 程序的 PID:nohup time matlabR2012b -nodesktop -nosplash -nodisplay \ -r "fprintf('PID: %s\n', num2str(feature('getpid')));run $1; exit" &> "$2" &
有幾種方法可以標記流程的實例。您可以通過程序列表中的命令名稱(例如
matlab_1
,代替matlab
)或通過環境變數來執行此操作。也可以使用 PID。你只需要在開始之前輸出它matlab
:nohup time bash -c 'echo $$; exec matlab -some_parameters -r "run '"$1"';exit"' &>> "$2" &
編輯1:
$$
是 shell 的 PID,但由於exec
該matlab
程序只是覆蓋了 shell 程序,即 PID 不會改變。exec
意味著在被呼叫程序結束時沒有跳轉回shell;因為沒有殼了。有關我提到的其他選項的解釋,請參閱我對這個問題的回答。