Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将工作线程/线程的不同PARF的fprintf和disp输出重定向到单独的窗口_Linux_Multithreading_Matlab_Unix_Printf - Fatal编程技术网

Linux 将工作线程/线程的不同PARF的fprintf和disp输出重定向到单独的窗口

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,它们都包含相同的计算,但针对不同的

我有数千行的MATLAB代码,它们实现了对功能磁共振成像脑成像数据的不同计算密集型操作。许多操作可以在多个并行线程中运行,但问题是不同线程/工作线程的所有
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”打开终端,这可能是我问题的一个解决方案。这可能是一个可能的解决方案,也可能是其中的一部分。谢谢。