最近發現一個問題,ps命令輸出裡面進程狀態為S+的含義,網上好多文章都說是表明進程“位於在後臺進程組”。 例如下麵這個ps命令輸出說明: 但其實這是不對的,後面有加號說明進程是“位於在前臺進程組”。也就是進程可以使用鍵盤輸出。下麵做一個試驗證明這點: 首先,在終端一個會話執行一個sleep命令,讓其 ...
最近發現一個問題,ps命令輸出裡面進程狀態為S+的含義,網上好多文章都說是表明進程“位於在後臺進程組”。
例如下麵這個ps命令輸出說明:
D 不可中斷 Uninterruptible sleep (usually IO) R 正在運行,或在隊列中的進程 S 處於休眠狀態 T 停止或被追蹤 Z 僵屍進程 W 進入記憶體交換(從內核2.6開始無效) X 死掉的進程 < 高優先順序 N 低優先順序 L 有些頁被鎖進記憶體 s 包含子進程 + 位於後臺的進程組; l 多線程,克隆線程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
但其實這是不對的,後面有加號說明進程是“位於在前臺進程組”。也就是進程可以使用鍵盤輸出。下麵做一個試驗證明這點:
首先,在終端一個會話執行一個sleep命令,讓其在前臺運行。
接著,另啟一個終端會話,啟動一個後臺運行的sleep命令
使用ps查看進程狀態
可以看出在前臺的進程狀態為S+,而在後臺的sleep進程狀態都是S
查詢ps命令的幫助,是說”is in the foreground process group”,也可以證明我說的這點。
網上流傳的ps命令輸出說明的錯誤解釋非常多,我寫這篇文章,希望能糾正一下