GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara hibernasi suatu proses di Linux dengan menyimpan memorinya ke disk dan mengembalikannya nanti?

Saya dulu memelihara CryoPID, yang merupakan program yang melakukan persis seperti yang Anda bicarakan. Itu menulis konten ruang alamat program, VDSO, referensi deskriptor file dan status ke file yang nantinya dapat direkonstruksi. CryoPID dimulai ketika tidak ada kait yang dapat digunakan di Linux itu sendiri dan bekerja sepenuhnya dari ruang pengguna (sebenarnya, masih berfungsi, tergantung pada pengaturan distro / kernel / keamanan Anda).

Masalahnya adalah (memang) soket, sinyal RT yang tertunda, banyak masalah X11, implementasi glibc caching getpid() di antara banyak lainnya. Pengacakan (terutama VDSO) ternyata tidak dapat diatasi bagi sedikit dari kita yang mengerjakannya setelah Bernard meninggalkannya. Namun, itu menyenangkan dan menjadi topik tesis beberapa master.

Jika Anda hanya merenungkan sebuah program yang dapat menyimpan status berjalannya dan memulai kembali langsung ke status itu, jauh .. jauh .. lebih mudah untuk hanya menyimpan informasi itu dari dalam program itu sendiri, mungkin saat melayani sinyal.


Saya ingin memberikan pembaruan status di sini, mulai tahun 2014.

Jawaban yang diterima menyarankan CryoPID sebagai alat untuk melakukan Checkpoint/Restore, tetapi saya menemukan proyek tersebut tidak terawat dan tidak mungkin untuk dikompilasi dengan kernel terbaru. Sekarang, saya menemukan dua proyek yang dikelola secara aktif yang menyediakan fitur pemeriksaan aplikasi.

Yang pertama, yang saya sarankan karena saya lebih beruntung menjalankannya, adalah CRIUyang melakukan pos pemeriksaan/pemulihan terutama di ruang pengguna, dan memerlukan opsi kernel CONFIG_CHECKPOINT_RESTORE diaktifkan untuk berfungsi.

Checkpoint/Restore In Userspace, atau CRIU (diucapkan kree-oo, IPA:/krɪʊ/, bahasa Rusia:криу), adalah perangkat lunak untuk sistem operasi Linux. Dengan menggunakan alat ini, Anda dapat membekukan aplikasi yang sedang berjalan (atau sebagian darinya) dan memeriksanya ke hard drive sebagai kumpulan file. Anda kemudian dapat menggunakan file untuk memulihkan dan menjalankan aplikasi dari titik saat aplikasi dibekukan. Ciri khas dari proyek CRIU adalah sebagian besar penerapannya di ruang pengguna.

Yang terakhir adalah DMTCP; mengutip dari halaman utama mereka:

DMTCP (Distributed MultiThreaded Checkpointing) adalah alat untuk secara transparan memeriksa keadaan beberapa aplikasi simultan, termasuk aplikasi multi-utas dan terdistribusi. Ini beroperasi langsung pada biner pengguna yang dapat dieksekusi, tanpa modul kernel Linux atau modifikasi kernel lainnya.

Ada juga halaman Wikipedia yang bagus tentang argumen:Application_checkpointing


Jawaban menyebutkan ctrl-z benar-benar berbicara tentang menghentikan proses dengan sinyal, dalam hal ini SIGTSTP . Anda dapat mengeluarkan sinyal berhenti dengan kill :

kill -STOP <pid>

Itu akan menunda pelaksanaan proses. Itu tidak akan segera membebaskan memori yang digunakan olehnya, tetapi karena memori diperlukan untuk proses lain, memori yang digunakan oleh proses yang dihentikan akan ditukar secara bertahap.

Saat Anda ingin membangunkannya kembali, gunakan

kill -CONT <pid>

Solusi yang lebih rumit, seperti CryoPID, benar-benar hanya diperlukan jika Anda ingin proses yang dihentikan dapat bertahan dari shutdown/restart sistem - sepertinya Anda tidak memerlukannya.


Linux
  1. Cara Memeriksa Penggunaan Memori Proses dengan Perintah pmap Linux

  2. Cara Menentukan Proses Yang Menulis ke Disk di Linux

  3. Ambil penggunaan CPU dan penggunaan memori dari satu proses di Linux?

  1. Cara Menemukan dan Membunuh Proses Zombie di Linux

  2. Cara Menghapus Buffer Memori dan Cache di Linux

  3. Apa itu memori tinggi dan memori rendah di Linux?

  1. Bagaimana membatasi total sumber daya (memori) dari suatu proses dan anak-anaknya

  2. Bagaimana penggunaan memori dilaporkan di Linux?

  3. Linux:Bagaimana cara mengetahui di mana suatu proses dimulai dan bagaimana proses itu dimulai?