Linux程序狀態
摘要
本文我們將學習Linux程序狀態。我們將研究Linux程序在其生命週期不同階段可能處於的五個狀態中的每一個。
執行中 & 可執行
已停止
不可中斷睡眠
僵死
可中斷睡眠
上面提到的每個程序狀態都有其明確的原因。徹底瞭解這些狀態對於除錯資源耗盡或失控程序生成等問題非常有幫助。如果需要了解如何終止或殺死程序,這種理解就更為重要,因為根據程序的狀態可能需要不同的技術。
執行中 & 可執行
啟動新程序時,它會進入執行或可執行狀態。執行時,程序使用CPU核心執行其邏輯和程式碼。然而,執行緒排程方法可以強制執行中的程序放棄其執行權。這將確保每個程序都能平等地訪問CPU資源。由於程序現在處於可執行狀態並等待執行,因此在這種情況下,它會提前被新增到執行佇列中。
執行中的程序已準備好執行,而可執行的程序已排隊,但由於某種原因,CPU尚未準備好排程它們。因此,它被安排執行。由於虛擬機器環境中的實際CPU是超配的,因此虛擬CPU可能會有稍微更多的延遲或CPU就緒性。
可中斷睡眠
執行中的程序會在某個時刻到達等待資料的階段。這可以透過一種方式來實現,例如請求使用者的輸入,例如終端的輸入。其他時候,該程序可以是一個空閒等待請求的Web伺服器。
編寫良好的程式在等待此資料時會進入可中斷睡眠狀態。此狀態使終止程序變得簡單且無故障。在等待輸入時,程序可能會進入此狀態以退居二線並讓其他程序使用CPU。不必要地迴圈使用CPU時間會浪費資源。可以透過在前面加上點(.)來建立新的目錄或檔案,並將其隱藏在檔案的正常列表中。
不可中斷睡眠
與可中斷睡眠一樣,程序處於不可中斷睡眠狀態時處於等待狀態。在這種情況下,中斷通常會非常成問題。雖然不常見,但當發現程序處於此狀態時,通常是系統呼叫(通常稱為syscall)造成的。Mkdir就是一個很好的例子。在它對核心進行系統呼叫時會進入此狀態。對於本地磁碟,這種情況通常會立即發生,除非在極端條件下。如果存在正確的條件,則在像NFS這樣的網路檔案系統中,它可能會在此狀態下無限期地停滯。
不可中斷睡眠狀態對任何訊號均無響應;它只是等待資源可用,然後才能轉換為可執行狀態。另一方面,可中斷睡眠狀態將響應訊號和資源的可用性。
已停止
您可以將已停止的程序更多地視為已暫停的程序。在許多控制檯工具和應用程式中,您可以使用Control + Z來掛起程序。在這種情況下,程序已暫停且無響應。當前景程式請求使用者輸入但您尚未準備好提供時,這說明了程序可能處於此狀態的情況。您可以使用Control+Z將其掛起,然後繼續執行其他操作。當您準備好繼續處理它時,可以使用“fg”命令將其調回。
僵死
處於僵死狀態的程序似乎處於異常狀態。簡單來說,這是程序終止後但在其父程序將其從程序表中移除之前的狀態。程序結束後,父程序有責任“回收”子程序並清理程序表。
在大多數情況下,僵死程序只在父程序未完成此清理並且仍有執行中的程序時才會出現。“僵死”這個詞大概是類比,因為僵死是死而復生,因此無法殺死。考慮一下在這種情況下可能有效的方法。它已經結束,但尚未真正消失。
結論
在本教程中,我們學習了一些在Linux中跳過隱藏檔案和目錄的遞迴複製示例。我們在本文中討論瞭如何在複製目錄時遞迴地省略隱藏檔案和目錄。
複製所有內容然後刪除隱藏項的方法很簡單。這可能會導致安全漏洞和效能問題。任何Linux使用者都可以快速修復此問題。隨意嘗試Linux提供的任何方法來解決此問題,以消除此錯誤。上述步驟適用於各種Linux發行版。所有作業系統都必須將檔案描述符作為基本元素。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP