Linux

為什麼 Firefox 儘管使用 pkill -9 殺死了它,但它仍然拒絕死亡?

  • November 27, 2021

我正在發出以下命令來殺死我的 Red Hat Linux 機器上的 Firefox:

[subhrcho@slc04lyo ~]$ pkill -9 -f firefox
[subhrcho@slc04lyo ~]$ 

但是,當我嘗試通過 Applications -> Internet -> Firefox 呼叫 Firefox 時,它說:

Firefox 已經在執行,但沒有響應。要打開新視窗,您必須先關閉現有的 Firefox 程序,或重新啟動系統。

kill -9如果不是絕對必要,請勿使用。總是先嘗試kill(沒有-9)。

您“殺死” firefox 的麻煩可能是以前kill -9(或pkill -9)的結果。

我認為這就是您的情況:

  1. 火狐正在執行。您的個人資料目錄中的鎖定文件。
  2. 你做到了pkill -9 -f firefox。Firefox 立即被殺死。鎖定文件仍在您的個人資料目錄中。
  3. 您開始一個新的 Firefox 程序。
  4. 新的 firefox 程序看到配置文件目錄中的 lockfiles 並認為另一個 firefox 程序仍在執行並拒絕啟動並顯示誤導性錯誤消息。
  5. 您對錯誤消息感到困惑,並認為 firefox 以前沒有被殺死。
  6. 您嘗試繼續殺死沒有效果的firefox,因為沒有執行firefox程序。

如果您確定 firefox 已被殺死(檢查pgrep -fl firefox),您可以手動從您的配置文件中刪除鎖定文件。有關更多資訊,請參閱這篇 mozillazine 文章:http ://kb.mozillazine.org/Profile_in_use 。

有關為什麼不kill -9看到這個問題和答案的更多解釋:我什麼時候不應該殺死 -9 一個程序?.


背景資料:

Firefox 在配置文件目錄中維護鎖定文件。鎖定文件用於防止兩個 Firefox 實例同時訪問同一個配置文件。

如果您啟動 Firefox,它將首先檢查鎖定文件。如果沒有鎖定文件,則 Firefox 將放置鎖定文件並正常啟動。如果已經有鎖定文件,則 firefox 將假定此配置文件被另一個 firefox 實例使用,並顯示(可能誤導)錯誤消息,即已經有一個實例正在執行。

該錯誤消息可能會產生誤導,因為 Firefox 僅檢查鎖定文件。它不檢查是否真的有 firefox 程序在執行。有時確實沒有其他 Firefox 實例在執行。只是從前一個實例中遺留下來的鎖定文件,無論出於何種原因都沒有被正確刪除。

如果您正常關閉Firefox,它會在實際關閉之前進行一些維護工作。如果您觀察程序(例如使用top),您會注意到 firefox 不會立即從程序列表中消失。也那個 Firefox 正在使用大量的處理器在這個時候。Firefox 目前正在做的其他工作之一是刪除鎖定文件,以便配置文件可以自由地用於下一次呼叫 firefox。

如果您使用killfirefox(不帶-9),則 firefox 將嘗試快速關閉,但仍會進行一些維護工作,例如刪除鎖定文件。這也意味著 Firefox 不會立即從程序列表中消失。

這實際上是軟體的正常和預期行為。許多軟體在工作記憶體中有一些狀態,在終止時保存到磁碟是謹慎的。如果請求終止(通過使用者點擊關閉按鈕、kill不帶-9ctrl+c在終端中),軟體會收到通知並開始執行維護工作,然後終止。

如果您kill -9是一個程序,那麼該程序將不會收到終止請求的通知,而是會立即被終止。如果您使用kill -9firefox,則 firefox 會立即被殺死,並且無法刪除鎖定文件。下次啟動 Firefox 時,您會收到誤導性的錯誤消息。

這就是為什麼如果不是絕對必要的話你不應該使用kill -9,而且大多數時候它不是絕對必要的。

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