Debian

如何讓系統自動殺死某些程序?

  • June 23, 2012

有時,我的電腦在同時執行太多程序/程序後開始表現緩慢,幾乎看起來崩潰/凍結。使用 Debian Linux,有沒有辦法在記憶體變得太稀缺而無法順利執行之前自動殺死一些程序?

基本上,您需要一個監視空閒記憶體的守護程序,如果它低於給定門檻值,它會選擇一些程序並殺死它們以釋放一些記憶體。

while (true) {
   size_t free_memory = get_free_memory();
   if (free_memory < free_memory_threshold) {
       pid_t pid = choose_a_process_to_kill();
       kill(pid, SIGTERM);
   }
}

一個明顯的問題是:如何選擇要殺死的程序?一個簡單的答案將是記憶體使用量最大的那個,因為這很可能是行為不端的“記憶體佔用”,並且殺死一個程序將為許多其他程序釋放足夠的記憶體。

然而,一個更根本的問題是:殺死這樣一個程序來為其他人釋放記憶體真的可以嗎?你怎麼知道一個大過程不如其他過程重要?沒有一般的答案。此外,如果您稍後嘗試再次執行那個大程序,您會允許它踢出許多其他程序嗎?那樣的話,豈不是無休止的報復

實際上,虛擬記憶體機制已經在為你做類似的事情。它不是殺死程序,而是將它們的一部分記憶體交換到磁碟上,以便其他人可以使用它。目前一個程序稍後嘗試使用這部分記憶體時,虛擬記憶體機制會將頁面換回。當這種情況發生在不同的程序有爭議時(稱為thrashing),您需要終止一些程序以釋放記憶體,或者更優選地提供更多記憶體。系統啟動時

引用自:https://unix.stackexchange.com/questions/41419