Linux 将工作线程/线程的不同PARF的fprintf和disp输出重定向到单独的窗口
我有数千行的MATLAB代码,它们实现了对功能磁共振成像脑成像数据的不同计算密集型操作。许多操作可以在多个并行线程中运行,但问题是不同线程/工作线程的所有Linux 将工作线程/线程的不同PARF的fprintf和disp输出重定向到单独的窗口,linux,multithreading,matlab,unix,printf,Linux,Multithreading,Matlab,Unix,Printf,我有数千行的MATLAB代码,它们实现了对功能磁共振成像脑成像数据的不同计算密集型操作。许多操作可以在多个并行线程中运行,但问题是不同线程/工作线程的所有fprintf和disp输出都打印在同一窗口中 我已经编写了一个自定义多线程代码,在Linux环境中使用unix命令派生出新的MATLAB实例。因此,我首先写出.m文件preprocesssubs1.m、preprocesssubs2.m、preprocesssubc3.m和preprocesssubc4.m,它们都包含相同的计算,但针对不同的
fprintf
和disp
输出都打印在同一窗口中
我已经编写了一个自定义多线程代码,在Linux环境中使用unix
命令派生出新的MATLAB实例。因此,我首先写出.m文件preprocesssubs1.m、preprocesssubs2.m、preprocesssubc3.m和preprocesssubc4.m,它们都包含相同的计算,但针对不同的主题。这4个MATLAB函数彼此完全独立
CellArrayOfFunctions = { 'PreprocessSubj1', 'PreprocessSubj2', ...
'PreprocessSubj3', 'PreprocessSubj4' };
CellArrayOfFunctions_i = 1;
while (CellArrayOfFunctions_i <= size(CellArrayOfFunctions, 2))
FunctionToBeRun = CellArrayOfFunctions{CellArrayOfFunctions_i};
unix([ 'matlab -desktop -r ', FunctionToBeRun, ' &' ]);
CellArrayOfFunctions_i = CellArrayOfFunctions_i + 1;
end
rayoff函数={'preprocesssubject1','preprocesssubject2'。。。
'预处理子对象3','预处理子对象4'};
rayoffunctions_i=1;
(i您可能希望写入/dev/pts/#,其中#将表示窗口。您可以通过以下方式执行此操作:
output1 = fopen('/dev/pts/0', 'w');
output2 = fopen('/dev/pts/1', 'w');
fwrite(output1, 'Data to window 1');
fwrite(output2, 'Data to window 2');
不过,您需要确定在/dev/pts/之后放哪些数字。每次打开新的终端时,都会出现一个与该终端对应的新文件,这样您就可以检查哪些终端可用!ls/dev/pts
我对Matlab一无所知,但是否有办法为printf语句添加前缀使用线程id写入日志?然后跟踪日志,将输出传输到搜索线程id的grep。在不同的终端中为您感兴趣的每个线程执行此操作。只是想一想。我已经在为每个线程编写单独的日志,但这只适用于我自己的代码,而不适用于MATLAB工具箱的fprintf语句但是如果我用我自己的fprintf.m替换MATLAB内置的fprintf,对MATLAB内置的disp做同样的操作,并用“tail-f$logfilename.txt”打开终端,这可能是我问题的一个解决方案。这可能是一个可能的解决方案,也可能是其中的一部分。谢谢。