Bagaimana menghentikan proses Linux untuk eksekusi nanti, menukarkan memorinya

19

Saya ingin menghentikan proses yang berjalan lama sehingga tidak mengkonsumsi CPU atau sumber daya memori fisik, dengan maksud untuk melanjutkan proses yang sama di masa depan.

Saya tahu bagian CPU dapat dicapai menggunakan SIGSTOPdan SIGCONT sinyal tetapi apakah mungkin untuk keluar (swap-out jika proses halaman kotor) segera memori RSS pribadi dari proses (berhenti)?

idelvall
sumber
1
Apa niat di balik ini? Apakah Anda ingin memastikan bahwa proses dilanjutkan lebih cepat? Atau Anda ingin mencegah data sensitif ditulis ke disk? Atau sesuatu yang lain? Jika kita tahu niatnya, kita mungkin bisa memberikan jawaban yang lebih baik.
oliver
13
OS akan melakukan ini secara otomatis. Tidak ada alasan untuk melakukan sesuatu yang spesifik.
David Schwartz
@oliver Saya membuat penjadwal batch ( github.com/brutusin/wava ). Implementasi saat ini menawarkan penjadwalan non-preemptive tapi saya ingin pindah ke preemptive (bisa berhenti menjalankan pekerjaan) untuk menghindari beberapa situasi jalan buntu ketika semua pekerjaan yang berjalan tergantung pada pekerjaan yang antri. Saya membutuhkan perilaku yang diminta, melanjutkan proses yang terhenti (tidak membuat yang baru dari pos pemeriksaan)
idelvall
1
@ DavidvidSchwartz yang merupakan pernyataan berisiko
idelvall
@idelvall Kemudian sepertinya Anda tidak ingin melakukan sesuatu yang spesial pada memori.
David Schwartz

Jawaban:

11

Anda mungkin melihat teknik yang disebut checkpoint / restore. Ini akan memungkinkan Anda untuk mengambil proses yang sedang berjalan dan menyimpan statusnya ke satu set file, lalu mengembalikannya di lain waktu.
Untuk menggunakannya, mulailah dengan menginstal program criu [ git , wiki ] ( yum install criuatau apt install criu).

Untuk memeriksa proses yang sedang berjalan, buat direktori kosong untuk menyimpan file dan cd-nya ke direktori itu.

mkdir /var/tmp/checkpoint
cd /var/tmp/checkpoint

Sekarang periksa proses yang sedang berjalan. Dalam hal ini saya menggunakan --shell-job karena saya memiliki proses saya berjalan dalam shell dengan tty terkait.

criu dump -t 404 --shell-job

404 adalah pid dari proses yang ingin saya periksa. Ketika saya melakukan ini, saya melihat proses saya berjalan terbunuh dan direktori / var / tmp / checkpoint saya diisi dengan satu set file yang diperlukan untuk mengembalikannya.

Untuk memulihkan proses, saya memastikan saya berada di direktori dengan file pos pemeriksaan dan melakukan pemulihan.

cd /var/tmp/checkpoint
criu restore --shell-job

Proses akan mengambil di mana ia tinggalkan di terminal tempat ini dijalankan. Jika saya menghentikan proses yang berjalan ini dan menjalankannya criu restore --shell-joblagi, prosesnya akan kembali ke pos pemeriksaan dan mulai lagi.

Semoga ini membantu.

virtex
sumber
4
Ini tidak melakukan apa yang menurut OP ingin mereka lakukan. Cobalah - tidak akan ada pengurangan dalam memori yang digunakan. Itu hanya akan beralih dari proses memori pribadi ke cache disk (karena menulis set file). Itu hanya membuat langkah penyimpanan ekstra dan langkah pemulihan ekstra, dan memori yang sama digunakan (dan dapat dikeluarkan) dengan cara yang sama. Bahkan, ini dapat memperburuk keadaan karena beberapa memori terduplikasi karena menghasilkan semua yang baru untuk ditulis.
David Schwartz
heh, poin bagus @ David, terutama jika /tmptmpfs (didukung oleh ruang memori / swap). Jika Anda memeriksa titik ke sistem file yang didukung disk biasa, Anda dapat menggunakan vmtouch -euntuk mengusir halaman dari pagecache, tetapi masih menggunakan RAM tambahan untuk sementara. (Kecuali jika criuada opsi untuk mengarahkan i / o (dengan O_DIRECT) ...)
Peter Cordes
1
Sulit untuk mengetahui apakah ini yang diinginkan OP atau tidak karena OP meminta solusi spesifik daripada menjelaskan masalah apa yang dia coba selesaikan. Ini mungkin jawaban yang sempurna atau mungkin tidak berguna baginya, kami tidak tahu.
David Schwartz
Saya belum melihatnya secara detail, tetapi, sepertinya proses yang dipulihkan adalah proses baru (pId berbeda), dan ini bukan apa yang saya butuhkan ...
idelvall
1
@idelvall: Begitulah cara kebanyakan rasa dari pos pemeriksaan / pemulihan bekerja. Satu kasus penggunaan utama adalah untuk menyimpan kemajuan dalam perhitungan di seluruh reboot.
Peter Cordes