我在编译.c-mex文件时遇到问题。特别是,我无法判断它是否需要很长时间才能编译(这是一个非常大的程序,大约有60MB的代码),或者它是否配置错误或有其他问题。
我在Ubuntu 12.04 64位,MATLAB 2015a上,配置了gcc。我的c文件名为test4.c.
所以,我运行:
mex -v test4.c
Verbose mode is on.
Neither -compatibleArrayDims nor -largeArrayDims is selected.
Using -compatibleArrayDims. In the future, MATLAB will require the use of
-largeArrayDims and remove the -compatibleArrayDims option.
For more information:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.
... Looking for compiler 'gcc' ...
... Executing command 'which gcc' ...
这就是我所得到的。如果它在做更多的事情,我本以为详细模式会打印出来
它在编译吗?我怎么知道?为什么它会被困在这里(以及"哪个gcc"在做什么?
命令which gcc
通常只会告诉您gcc
在系统上的安装位置,这应该很快。你可以自己从一个外壳中尝试确认:
pax> which gcc
/usr/bin/gcc
因此,如果这真的需要很长时间才能做到,我会感到非常惊讶
最好的方法是打开一个终端并输入命令,将您的用户名放在它有<user>
:的地方
ps -fu<user> >/tmp/pslist.txt
在我的情况下,这将是ps -fupax
。
这将为您提供所有进程的列表,然后您可以使用该列表来跟踪树中当前正在运行的进程,例如:
UID PID PPID C STIME TTY TIME CMD
pax 3103 3099 0 11:42 pts/0 00:00:00 bash
pax 3137 3103 0 11:48 pts/0 00:00:00 ps -f
首先查找mex -v test4.c
进程(在CMD
下)并获取其进程ID(PID)。从那里,您可以在父进程ID(PPID)字段中查找具有相同编号的所有进程。在我上面的例子中,bash
进程是ps
进程的父进程。
如果你顺着树往下走足够远,你会发现你的错误过程。假设它的寿命相对较长,则在相隔20秒检查ps
输出时,它将仍然存在(例如)——它也更有可能消耗了更多的CPU时间,因此您可以在TIME
列中查找非零条目。