職場にはSSH経由でアクセスできるスーパーコンピュータがあります。
bsub
我々は、「擬似端末を使用した対話型bashセッション」(文書内)を生成する予約core引数を使用してコマンドを使用してログインします。
その後、対応する「疑似ターミナル」からフォルダに移動し、パラメータとしてソルバーを起動し、完了するまで実行します。
これにより、アプリケーションが完了し、セッションは開いたままになり、予約されたコアは開いたままになります。その後、数日後(金曜日の退職後にシミュレーションが完了した場合)、ITは月曜日にコアが予約されたことを知らせる電子メールを送信しますが、そうではありません。何があっても見なければなりません。
確認しましたhttps://stackoverflow.com/questions/14254118/waiting-for-Background-processes-to-finish-before-exiting-scriptそしてBash - 前のコマンドが完了した後にコマンドを実行するには?その他のフォーラム/チュートリアルを参照しましたが、私が見つけたのは、端末を閉じた後でもアプリケーションを実行し続ける方法(ターミナルからアプリケーションを分離すること)でした。
反対が必要です。端末を閉じたいです。 (これはソルバーの最後のステップなので、端末を終了して終了することができます。)
私は提案を受け入れる準備ができています。スクリプトで行うことも、C++ ソルバーでコードを書くようにすることもできます。
私は次のことを試しました(仮想マシンで実行されているUbuntuサーバーでは、これがどんな環境でもある程度動作すると予想しています。bash
間違っている場合は修正してください)。
遅延テスト.c:
#include <stdio.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
printf("Doing some fake lengthy operation...");
sleep(15); // sleep for 15 seconds
return 0;
}
期待どおりにコンパイルされ実行されます。戻る前にsystem("clear");
(部分的に)試してみましたが、stdlib.h
これも効果がありました。メッセージを受信してから15秒後に画面が消去され、アプリが終了しました。
それから試してみましたが、何も起こりませんでしたsystem("exit");
。exit
私の推測は、アプリケーションがターミナルを終了する前に戻る必要があることです。これは単なる推測です。
私もスクリプト方式を試しました。
テスト.sh:
#!/bin/bash
./delay_test &
wait
exit
exit
この場合、ステートメントはスクリプトを完了しますが、関連アプリケーションが終了したら端末セッションを終了する必要があることを理解しています。
それでは、アプリケーションが終了した後に「医師ターミナル」を強制的に終了するにはどうすればよいですか?
答え1
これを行う最も簡単な方法は、提供されたシェルをソルバーに置き換える組み込みシェルをbsub
実行したいコマンドの前に付けることです。exec
exec yoursolver
終了すると、シェルが長い間ソルバーに置き換えられたためyoursolver
に戻ります。bsub
(ところで、一部の言語(TCL、PHP)exec
では まったく好きではないシェルまたはPerlexec
またはCexec(3)
関数。したがって、その言語を使用している場合や慣れている場合は、この違いを認識してください。 TCL および PHP バージョンは、元のプロセス以降の Csystem(3)
または Perlsystem
関数またはシェルにコマンドを入力するのと似ています。その後もまだ存在します。 )