1

Windows では、Matlab で次のコマンドを使用して、バックグラウンドで実行される MATLAB の新しいインスタンスを開始できます (つまり、MATLAB の最初のバージョンでコマンドを実行し続けることができます)。

システム('matlab &')

OSX での類似の呼び出し、

システム ([matlabroot '/bin/matlab &'])

ただし、スプラッシュ画像が表示され、その後は何も表示されません。アンパサンドを外すと、期待どおりに新しいインスタンスが開きます。残念ながら、これはうまくいきません。2 番目のインスタンスが実行されている間に、MATLAB の最初のインスタンスを制御できるようにする必要があります。

オペレーティング システム間にこの不一致が存在する理由を知っている人はいますか? ちなみに、OSX 10.7、Windows 7 64 ビット、Mac では MATLAB R2012a、PC では R2012b を使用しています。

背景として、input() 関数を広範囲に使用する対話型コマンド ライン インターフェイス用の汎用テスターを作成しようとしています。

編集:コマンドについて言及する必要がありました

/Applications/MATLAB_R2012a.app/bin/matlab &

OSX端末から期待どおりに動作します。つまり、MATLAB の新しいインスタンスが開き、ターミナルに新しいコマンドを入力できます。したがって、この問題は OSX matlab の system() 関数に固有のようです。

また、そのコマンドを bash スクリプトに追加して、matlab からスクリプトを呼び出してみましたが、コマンドを system() 関数に入れるのと同じ問題がありました。

ありがとう

4

2 に答える 2

0

system()これはロング ショットですが、Unix または OS X でコマンドを使用して Matlab から Matlab の新しいインスタンスを呼び出すと、matlab_helperプロセスがフォークしてシェル プロセスを実行し、新しいアプリケーションを実行するために発生する可能性があります。アンパサンドを省略すると、シェルはブロックしてプログラムが終了するのをsystem()待ち、それを待つため、最初の Matlab がロックされます。そして (ここに推測の部分があります) アンパサンドを追加すると、Matlab がバックグラウンドで起動し、フォークされたシェルが終了します。これにより、親プロセス (シェル) が終了したため、新しい Matlab プロセスが終了します。(Windows には、同じ親子プロセス関係、プロセス起動メカニズム、またはシェルがないため、異なる動作が説明されます。)

コマンドの前にnohup.

system(['nohup ' matlabroot '/bin/matlab &'])

OS Xopenコマンドを使用して、新しい独立したインスタンスを起動することもできます。このようなもの。オプションとパスをいじる必要があるかもしれませ-nんが、新しいインスタンスが得られるはずです。を指している必要があり/Applications/MATLAB_R2012a.appます。matlabrootそれがOS Xで返されているものだと思います。

system(['open -na ' matlabroot])

の代わりに、Matlab 内の Java プロセス起動機能から実行することもできますsystem()Runtime.exec()のようにブロックしません。また、アーキテクチャのようsystem()に、 には他にも癖があるかもしれません。Matlabから起動してみてください。system()matlab_helperjava.lang.Runtime

jrt = java.lang.Runtime.getRuntime();
newMatlabProcess = jrt.exec([matlabroot '/bin/matlab']);

このメカニズムを使用して、上記の他のコマンド ライン バリアントも試すことができます。新しいプロセスの入力と出力がそのnewMatlabProcessオブジェクトにバッファリングされるため、stdout を /dev/null にリダイレクトする必要がある場合があります。

于 2013-03-24T17:18:55.760 に答える