注:本文内容主要参考网址https://blog.csdn.net/u012395575/article/details/105684564
根据个人需要删除并增加了部分内容。
1. matlab命令行方式运行
1.1 命令行运行方法
$ matlab -help
需要注意的命令有
[-display Xdisplay | -nodisplay]
[--noFigureWindows]
[-nosplash]
[-desktop | -nodesktop | -nojvm]
[-batch MATLAB_command | -r MATLAB_command]
[-logfile log]
-display Xdisplay | - Send X commands to X server display, Xdisplay. Linux only. |
-nodisplay | - Do not display any X commands. The MATLAB desktop will not be started. However, unless -nojvm is also provided the Java virtual machine will be started. |
-noFigureWindows | - Disables the display of figure windows in MATLAB. |
-nosplash | - Do not display the splash screen during startup. |
-desktop | - Allow the MATLAB desktop to be started by a process without a controlling terminal. This is usually a required command line argument when attempting to start MATLAB from a window manager menu or desktop icon. |
-nodesktop | - Do not start the MATLAB desktop. Use the current terminal for commands. The Java virtual machine will be started. |
-nojvm | - Shut off all Java support by not starting the Java virtual machine. In particular the MATLAB desktop will not be started. |
-batch MATLAB_command | - Start MATLAB and execute the MATLAB command(s) with no desktop and certain interactive capabilities disabled. Terminates upon successful completion of the command and returns exit code 0. Upon failure, MATLAB terminates with a non-zero exit. Cannot be combined with -r. |
-r MATLAB_command | - Start MATLAB and execute the MATLAB_command. Cannot be combined with -batch. |
-logfile log | - Make a copy of any output to the command window in file log. This includes all crash reports. |
在帮助文档中可以看到与图形界面相关的几个参数是:nodisplay, nosplash, nodesktop, nojvm. 它们代表的含义上表解释的很清楚。
由于Matlab的图形环境依赖JVM,如果不启动JVM,无法执行任何和图形界面相关的命令。若不执行任何X 命令,则无法执行imshow()等绘图函数。所以,我们如果需要在命令行下执行matlab程序,最好只添加:nodesktop nosplash两个参数。
标红的为matlab两种命令行运行方式,-batch的方式直接默认不打开图形界面,也没有matlab交互界面,运行完程序后退出matlab,其运行方法为:
进入需要运行的 .m 文件目录,在终端输入
$ matlab -batch matlabfile
其中,matlabfile为 .m 文件名,不带类型后缀 .m
-r 的方式默认打开matlab,并运行程序,会出现matlab交互界面,运行完成后不退出matlab。若不想打开图形界面,则要配合其他参数使用,其运行方法为:
$ matlab -nodesktop -nosplash -r matlabfile
matlab运行时,可带参数[-logfile log],将终端输出结果拷贝到log文件中。
若有函数参数传入,则为
$ matlab -nodesktop -nosplash -r matlabfile(parameters)
参考链接1给出了利用.bashrc文件添加相应command然后执行.m文件方式,具体见参考链接1。
1.2 添加matlab搜索路径
采用命令行方式运行matlab,就失去手动添加搜索路径的机会了。因此,如果运行的程序需要调用其他文件夹的数据和函数时,就会出现问题。参考链接2给出了解决的办法,即可在需要运行的matlab程序(例如matlabfile)开头添加如下语句,以自动添加路径:
addpath(genpath(pwd));
其中,addpath的作用是将参数路径添加到搜索区,genpath是为了获取参数路径及其所有子文件夹,pwd是返回当前路径,也就是matlabfile所在的路径。这里采用的是添加相对路径的方法,更具可移植性,亦可添加绝对路径,不再赘述。
注意,此时是把matlabfile的父文件夹下及其子文件夹均添加到搜索路径中了。
另外,命令行方式运行matlab时,matlab程序仍会占用终端,且关闭终端后,程序会中止。
2 Linux后台运行方法
matlab以命令行方式运行,仍会占用终端,并不解决问题,因此需要采用Linux后台运行方法。主要有5种方法,分别是nohup、setsid、disown、screen、"()"等,主要参见链接3、4和5。在此之前,需要明确的是,在Linux中“&”符号跟在命令后面时表示将该命令置为后台运行,不占据终端(见参考链接6)。例如:
$ matlab -batch MAIN_SCRIPT &
表明将matlab这一进程以命令行形式打开,并置于后台运行。此命令执行完毕后,matlab不占据终端,但终端会显示matlab的运行输出,且会受到SSH会话的影响。
此时终端输入jobs可查询正在后台运行的程序,如
笔者测试另一命令行方法 -r 并不能后台运行,原因可能跟交互式界面有关,这一点跟几个参考文献的内容相左。
命令行运行matlab,输出端口成为了当前终端,所有打印结果均输出到当前终端。如果想要把结果打印到文件而非终端,则需要在1.1节的基础上,添加语句,即:
matlab -batch matlabfile 1>running1.log 2>running1.err
将标准输出流写入running1.log文件中,标准错误流写入running1.err文件中,这两个文件储存在当前目录下。具体可见参考链接3.
也可将所有输出均放到同一个文件内,即:
matlab -batch matlabfile >running1.log
其中,数字0,1,2的含义: 0——stdin(standard input,标准输入),1——stdout(standard output,标准输出),2——stderr(standard error,标准错误。
这里尤其需要明确的是,只有在root权限下才可实现进程后台运行。以下参考链接4和5,总结这几种方法。
2.1 nohup
功能:将还未执行的程序置于后台运行。
语句:nohup matlab -batch MAIN_SCRIPT >running.log &
用nohup运行matlab的MAIN_SCRIPT.m文件之后,查询后台进程,如下
父进程号PPID为1,说明此进程不受终端的影响,可以后台运行。以下几种方法与此类似。
2.2 setsid
功能:在新的会话中运行程序。
语句:setsid command
2.3 disown
功能:使某个已在前端运行的job忽略HUP信号,从而不会被终端关闭所影响。
语句:disown -h %NUM #这里NUM是jobs的编号。
2.4 screen
功能:首先用screen语句建立新的虚拟会话,然后可在该会话下进行操作,以Ctrl + a + d 来安全退出。用screen -r 返回处于断开模式下的会话(并指定会话名)。
语句:screen -r SESSIONNAME #这里SESSIONNAME是会话名称
2.5 ()
功能:将一个或多个命令包含在括号内,就能让这些命令在子shell中运行。
语句:(command &)
注:如何关闭正在运行的后台进程
命令1:
kill -9 PID #这里,PID是进程号
命令2:
Ctrl + z
这里进程仅仅被暂停,而并未结束。
注:MobaXterm + 服务器 + matlab
https://blog.csdn.net/u012989568/article/details/80275946
参考网址:
1. https://blog.csdn.net/sinat_33425327/article/details/79125745
2. https://blog.csdn.net/enjoyyl/article/details/44830519
3. https://blog.csdn.net/weixin_40098515/article/details/88535262
4. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
5. https://blog.csdn.net/v1v1wang/article/details/6855552
6. https://blog.csdn.net/liuyanfeier/article/details/62422742