私はおそらく完了するのに数ヶ月かかるかなり難しい数学問題のアルゴリズムを開発しました。リソースが制限されているため、Ubuntu 12.04(x86)ノートブックでこれを始めました。今、私はいくつかのアップデートをインストールして実際にラップトップを再起動したいと思います(「もう一度始めてください」というメッセージは面倒です)。
再起動後も実行を続けるために割り当てられたメモリを含むプロセス全体を保存する方法はありますか?
以下は、あなたが必要とする可能性のあるプロセスに関するいくつかの情報です。必要に応じて追加情報をお問い合わせください。
- ""または"time ./binary> ./somefile &"コマンドを使用して端末からプロセスを呼び出しましたが、
./binary > ./somefile &
覚えていません。 - いくつかのデバッグ情報をstd :: cerrに印刷します(まれに)。
- 現在約600.0kiBを使用しており、この数字が増加しても急速に増加する可能性は低いです。
- プロセスは通常優先順位で実行されます。
- カーネルは3.2.0-26-generic-pae、CPUはAMD、オペレーティングシステムはUbuntu 12.04 x86です。
- 9日14時間行われました(キャンセルするには長すぎました;-))
答え1
最良かつ最も簡単な解決策は、プログラムを変更して状態をファイルに保存し、ファイルを再利用してプロセスを再開することです。
Wikipediaページに基づいてアプリケーションスナップショットさまざまなオプションがあります。
- しかもクーラントしかし、維持されていないようです。
- Linuxチェックポイント/再起動良いオプションだと思いますが、カーネルを有効にする必要があります
CONFIG_CHECKPOINT_RESTORE
。 - クルー最新のプロジェクトにすることも、最良の選択かもしれませんが、特定の状況に応じて変わることがあります。カーネルオプションディストリビューションがまだ設定されていない可能性があります。
遅すぎますが、もう1つのより実用的なアプローチは、専用の仮想マシンでプロセスを開始してから、仮想マシン全体を一時停止して再起動することです。ハイパーバイザーによっては、ホスト間でコンピュータを移動することもできます。
将来的には、長期実行プロセスを実行する場所、並列化方法、ディスクがいっぱいになる、プロセス終了などの問題を処理する方法を検討してください。
答え2
やや「安価な」方法は、仮想マシンで処理を実行することです(たとえば、VirtualBoxを使用)。仮想マシンを一時停止して終了する前に、状態を保存してください。起動後に仮想マシンと状態を復元します。
欠点は、ジョブを終了して再開する必要があることです。しかし、実際に数ヶ月間実行すると、9日間の差はわずかになります(6ヶ月に5%増加)。
編集する:私はUlrichがすでに彼のリストの項目4でこれを言及したことに気づきました。
特に、どちらの選択肢も信頼できるソリューションではないようですが、それをオプションとして考慮することをお勧めします。それぞれ動作しない理由があります。
最善の方法は、これらのいずれかを試してみて、機能しない場合は仮想マシンでタスクを再開することです。
答え3
ツールを見てください凍結したPID。
ホームページから:「CryoPIDを使用すると、Linuxで実行されているプロセスのステータスをキャプチャしてファイルに保存できます。ファイルを使用して後で再起動した後、または他のコンピュータでもプロセスを再開できます。」
答え4
最終的にプログラムを再起動する必要がある場合は、コードにいくつかの機能を追加するのに時間を費やすことをお勧めします。これにより、後で時間を節約できます。
プロセスが長時間実行される予定で、実行中にプロセスがクラッシュする場合は、コンピュータを再起動したときにプロセス全体の状態を保存することはあまり役に立ちません。
プログラムをファイルに出力してデータを「チェックポイント」することをお勧めします。このデータは、チェックポイントファイルが保存されたときにプログラムを回復するのに十分なはずです。プロセス全体を保存する必要はなく、計算に使用された関連変数のスナップショットのみを保存すると、中断された部分から計算を再開できます。また、コードには、開始状態を取得するためにこのファイルからデータを読み取る方法が含まれている必要があります。
信号を送信するときにこれらのチェックポイントファイルの1つを保存するようにコードを設定できるので、いつでも計算の「状態」を保存できます。
また、計算が進むにつれてデータがどのように変化するかを確認できるということ自体も興味深いかもしれません!