如何檢查哪個進程正在檔案系統 Solaris 上寫入

如何檢查哪個進程正在檔案系統 Solaris 上寫入

我需要確定哪個進程正在磁碟上不間斷寫入。

我嘗試運行prstat -t以獲取正在運行的進程列表,但我無法識別/找到它是哪個進程。

運行後df -k,我可以看到磁碟給定路徑上的空間不斷減少。

在殺死所有可以在磁碟上寫入的進程(並關閉所有外部連接)之後,仍然有東西在上面寫入。

作業系統 Solaris 10

答案1

它不會顯示實際的IO操作,但你也可以使用實用fuser程式以任何方式識別使用檔案系統的進程,即使是那些不會導致實際 IO 的進程,或以無法追溯到特定進程的方式執行 IO(mmap()檔案就是其中之一,其中檔案可以mmap()由多個進程完成):

概要

/usr/sbin/fuser [-c | -d | -f] [-nu] [-k | -s sig] files 
     [ [- ] [-c | -d | -f] [-nu] [-k | -s sig] files] ...

描述

fusion 公用程式顯示正在使用指定為參數的檔案的進程的進程 ID。

每個進程 ID 後面都有一個字母代碼。這些字母代碼的解釋如下。如果進程使用該檔案作為

c 表示進程正在使用該檔案作為其目前目錄。

m 表示進程正在使用透過 mmap(2) 映射的檔案。詳細資訊請參閱 mmap(2)。

n 表示進程正在檔案上持有非阻塞強制鎖。

o 表示進程正在使用該檔案作為開啟的檔案。

r 表示進程正在使用該檔案作為其根目錄。

t 表示進程正在使用該檔案作為其文字檔案。

y 表示進程正在使用該檔案作為其控制終端。

例子:

假設您的主目錄位於安裝在的單獨檔案系統上/export/home,這將顯示在該檔案系統上以任何方式使用檔案的所有進程,包括那些不執行任何 IO 但在該檔案系統中具有當前工作目錄的進程以及有從該檔案系統映射的檔案記憶體:

fuser -c /export/home

相關內容