為什麼ps看不到睡眠進程?

為什麼ps看不到睡眠進程?

我創建了第一個終端,然後使用“sleep 1000 &”,然後透過“ps”找到了它。問題是當我創建第二個終端並輸入“ps”時,沒有睡眠過程。我想知道為什麼?

在此輸入影像描述(我的作業說「提示:TTY專欄」)

答案1

預設情況下,ps僅顯示附加到目前終端 (tty) 的進程:在您的情況下,您的 shell 和ps它本身(都在pts/2)。您需要解除此限制才能看到sleep;例如

ps -e

請參閱man ps參考資料 以了解可用於過濾進程的許多選項。

答案2

問題是當我創建第二個終端並輸入“ps”時,沒有sleep進程。

對於一些(不是全部)互動式 shell,sleep 可能是一個內建的 shell 調用,例如睡覺(3)(正如cd shell 內建呼叫一樣目錄(2))。

當這種情況發生時,你將看不到任何sleep 過程因為沒有。那麼過程就是睡覺(3)-ing 是你的Unix外殼;你甚至可以編寫自己的 shell 解釋器(查看窗扇一個簡單但有點錯誤的例子)。

許多 Linux shell 都是開源軟體(或自由軟體),所以請研究他們的源代碼,看看他們是否確實調用睡覺(3)或者睡覺(3)-或甚至適當地民意調查(2)等等...-另請參閱時間(7)選擇圖(2)。閱讀更多關於系統調用(2)並想想你的 shell 所做的事情(或用追蹤(1)或者追蹤(1)或調試器)。

許多 Linux 發行版都有GNU bash就像通常的互動式 shell 一樣。但你可以安裝桀騁或者或者英語作為您的登入 shell(使用chsh(1))。

我個人的偏好是zsh自動完成Debian 上的設施非常出色)。

考慮讀一些教科書關於作業系統和/或編寫您自己的程式碼Unix外殼作為練習,或擴展一些現有的(例如,透過添加sleep內建的,如果沒有內建的)。

相關內容