我只開了一個 Chrome 瀏覽器,為什麼任務管理器裡面有兩個進程?


我只開了一個chrome,為什麼有那麼多進程呢?

首先你要明白chrome的獨特運作原理。

IE safari Firefox opera 都不會出現這種情況,只有chrome會。而這正是chrome的獨特功能,沙盒瀏覽。

每個標籤頁面都在獨立的「沙箱」內運行,在提高安全性的同時,一個標籤頁面的崩潰也不會導致其他標籤頁面被關閉。

好處是保障安全性和不關聯性,你在標籤頁上崩潰了,不會影響其他標籤頁。

壞處是佔用內存。

@SkywalkerJi 指出

事實上現在chrome已經不是每個標籤頁都獨立了

chrome://memory-redirect/

可以看到有些網頁進程是合併的。

在這裡你可以看到,不僅僅是標籤頁,還包括擴展都是有獨立的沙盒的。

再次感謝。

@鋼盅郭子 指出

有些網頁共用一個進程的原因是它們和伺服器之間保持了共同的會話

查看了一下實例,確實如此。

感謝指出,謝謝。

--------------------------

修正一下

IE safari Firefox opera 都不會出現這種情況,只有chrome會。

這句話存疑

@揭雙 指出

Opera和Chrome一樣了。

IE,包括IE11之內的都不提供沙盒技術

safari 在OS X 中對Flash Player 有啟用沙盒功能,和chrome採用的標準似乎不一樣。

Firefox 曾經在3.5時代就提出Electrolysis的計劃,但是後來放棄了。

opera 在放棄 Presto轉投WebKit之後提出過應用沙盒技術,但是沒有見下文。

補充@揭雙 又指出

opera 和 Chrome 在較新版本中Chrome(28及往後版本),Opera(15及往後版本)採用了一個WebKit的一個獨特編譯版本Blink。

基本明確兩點

1:在WebKit內核上實現沙盒技術更容易。

2:以沙盒技術為營銷賣點的瀏覽器只有chrome一家。

-------------------------------------------------------------------------------------------

@惡之華

提出的chrome進程與標籤有4種對應關係,非常具體明確,可以借鑒

-------------------------------------------------------------------------------------------

答主非程序員,歡迎指正批評。


除了一個進程可以開N個子進程這個原因之外,還有一個相對較少人知道的事實:

  • Windows下一個窗口和其子窗口(如控制項、子控制項)可以分屬不同的進程,而且可以不必是父子進程


呃 chrome每個標籤頁都是單獨的進程,每個擴展也有自己獨立的進程,再加上GPU加速進程和瀏覽器本身的一個進程.....我現在打開chrome任務管理器就多出8個進程(有一個主頁),不過8G內存表示毫無壓力(我還開了一個1G的內存檔)....

--------------------------------------------------------------------------------------

chrome進程合併情況與版本有關,我的原生chrome33穩定版並沒有進程合併的現象.....

有些國產雙核瀏覽器為了降低內存佔用可能會有進程合併的設計....

--------------------------------------------------------------------------------------

俺又查了一下,回來試著談談chrome的進程數問題,前面的說法確實不嚴謹....

chrome進程與標籤有4種對應關係:(來自Chrome的進程體系)

1.Process-per-site-instance:就是你打開一個網站,然後從這個網站鏈開的一系列網站都屬於一個進程。這是Chrome的默認模式。(這裡有異議,原生chrome33的默認模式是process per tab(後面有圖為證),可能是某個版本更新之後預設值變了,那個資料是09年的...)

2. Process-per-site: 同域名範疇的網站放在一個進程,比如Google和http://www.google.com/bookmarks就屬於一個域名內(google有自己的判定機制),不論有沒有互相打開的關係,都算作是一個進程中。用命令行--process-per-site開啟。

3. Process-per-tab:這個簡單,一個tab一個process,不論各個tab的站點有無聯繫,就和宣傳的那樣。用--process-per-tab開啟。

4. Single Process:這個很熟悉了吧,傳統瀏覽器的模式,沒有多進程只有多線程,用--single-process開啟。

5.在Chrome中每一個插件也是一個獨立的進程。

我的chrome版本如下,默認是process per tab模式,chrome自帶的任務管理器按shift+esc就能打開。圖裡左邊一個點對應一個chrome.exe進程,如果是進程合併了,共用同一進程的標籤頁左邊是一條灰線.....

下面是演示,打開的頁面完全相同....

默認狀態,process per tab模式:

加了--process-per-site參數之後的情況,注意紅圈裡的進程合併:

多說一句,要是嫌內存不夠就加--process-per-site參數吧,兼顧穩定和資源佔用(一個標籤頁崩潰最多連累同一進程里的標籤頁)....


chrome每一個插件和窗口都是一個獨立進程,這樣隨便哪個崩潰了不會影響大局


有沒有辦法合併這些進程呢,我裝了十幾個插件就有十幾個進程耗費內存啊


我只打開一個標籤,也沒有擴展程序,為什麼有兩個chrome.exe進程?


推薦閱讀:

如何評價 Chrome 中使用 Material Design 的試驗功能?
Google Chrome 的密碼保存設計比起其他瀏覽器它是否存在更大的安全隱患?用戶有無更安全方便的密碼管理對策?
如何評價 Spartan 瀏覽器?
哪裡有 Chrome 開發者工具的官方文檔?
Google Chrome 為什麼沒有右鍵關閉標籤功能呢?

TAG:GoogleChrome | 軟體 | 網頁瀏覽器 | 計算機 | 任務管理器 |