GNU/Linux >> Linux の 問題 >  >> Linux

メモリをディスクに保存して後で復元することにより、Linuxでプロセスを休止状態にする方法は?

私は CryoPID を維持していました。これはまさにあなたが話していることを実行するプログラムです。プログラムのアドレス空間、VDSO、ファイル記述子の参照、および状態の内容を、後で再構築できるファイルに書き込みます。 CryoPID は、Linux 自体に使用可能なフックがなく、ユーザー空間から完全に機能したときに開始されました (実際、ディストリビューション / カーネル / セキュリティ設定によっては、まだ機能しています)。

問題は (実際) ソケット、保留中の RT シグナル、多数の X11 の問題、glibc キャッシュの getpid() 実装などでした。ランダム化 (特に VDSO) は、Bernard がそれから離れた後、それに取り組んでいる数人の私たちにとって克服できないことが判明しました。しかし、それは楽しく、いくつかの修士論文の話題になりました.

実行中の状態を保存し、その状態で直接再起動できるプログラムを検討している場合は、おそらくシグナルを処理するときに、プログラム自体からその情報を保存する方がはるかに簡単です。


2014 年現在の最新状況をここに掲載したいと思います。

受け入れられた回答は、チェックポイント/復元を実行するツールとして CryoPID を示唆していますが、プロジェクトは管理されておらず、最近のカーネルでコンパイルすることは不可能であることがわかりました.現在、アプリケーションのチェックポイント機能を提供する 2 つの積極的に管理されているプロジェクトを見つけました.

最初に提案するのは、運がよかったので、主にユーザー空間でチェックポイント/復元を実行する CRIU であり、機能するにはカーネル オプション CONFIG_CHECKPOINT_RESTORE を有効にする必要があります。

<ブロック引用>

Checkpoint/Restore In Userspace、または CRIU (kree-oo と発音、IPA:/krɪʊ/、ロシア語:криу) は、Linux オペレーティング システム用のソフトウェア ツールです。このツールを使用すると、実行中のアプリケーション (またはその一部) をフリーズし、ファイルのコレクションとしてハード ドライブにチェックポイントを設定できます。その後、ファイルを使用して、フリーズした時点からアプリケーションを復元および実行できます。 CRIU プロジェクトの際立った特徴は、主にユーザー空間で実装されることです。

後者は DMTCP です。メインページからの引用:

<ブロック引用>

DMTCP (Distributed MultiThreaded Checkpointing) は、マルチスレッドおよび分散アプリケーションを含む複数の同時アプリケーションの状態を透過的にチェックポイントするツールです。これは、Linux カーネル モジュールやその他のカーネル変更なしで、ユーザー バイナリ実行可能ファイルで直接動作します。

引数に関する素敵なウィキペディアのページもあります:Application_checkpointing


ctrl-z に言及している回答 シグナルでプロセスを停止することについて実際に話している、この場合は SIGTSTP . kill で停止信号を出すことができます :

kill -STOP <pid>

これにより、プロセスの実行が中断されます。使用されているメモリをすぐに解放するわけではありませんが、他のプロセスがメモリを必要とするため、停止したプロセスが使用していたメモリは徐々にスワップアウトされます。

もう一度起こしたい時は

kill -CONT <pid>

CryoPID などのより複雑なソリューションは、停止したプロセスをシステムのシャットダウン/再起動後も存続させたい場合にのみ必要です。必要なようには思えません.


Linux
  1. Linuxで単一プロセスのCPU使用率とメモリ使用率を取得しますか?

  2. プロセスとその子プロセスの総リソース (メモリ) を制限する方法

  3. Linux:プロセスが開始された場所と開始方法を知る方法は?

  1. Linuxコマンドをバックグラウンドで起動し、ターミナルでプロセスをデタッチする方法

  2. Linuxpmapコマンドでプロセスのメモリ使用量を確認する方法

  3. Ubuntu Linux:プロセス スワップ メモリとメモリ使用量

  1. Linuxでゾンビプロセスを見つけて殺す方法

  2. Linuxでメモリバッファとキャッシュを削除する方法

  3. Linux でディスクに書き込みを行っているプロセスを特定する方法