topコマンドとpsコマンドの違い

topコマンドとpsコマンドは、プロセスを監視するコマンドでありますが、ある疑問がありましたので、共有します。

プロセスとは、動作中のプログラムをオペレーティングシステムが管理する基本単位を指します。

プログラムを実行すると、プロセスが割り当てられます。

topコマンドとpsコマンドは、ともにプロセスを監視するコマンドですが、

違いとしては、topコマンドでは、プロセスを継続的に表示するのに対して、

psコマンドでは、コマンド実行時のプロセスを表示させます。

そのぐらいしか当時、topコマンドとpsコマンドの知識がありませんでした。

ここからは、実際にあった疑問点を紹介します。

疑問点

topコマンドでは、自分の実行したプログラムが3つ実行されているのに、psコマンドでは1つしかプログラムが実行されていないことになっているのです。

同じプロセスを監視するコマンドであるtopコマンドとpsコマンドでなぜこのような違いが生まれたのでしょうか。

原因

psコマンドを実行した際、単純にオプションなしでpsコマンドを実行していました。

そこに問題がありました。psコマンドでは、オプションなしでは、制御端末のあるプロセスのみ表示します。

制御端末のあるプロセスは、今現在の端末で実行したプログラムなどを指します。

たとえ、バックグラウンドで実行したプログラムであってもfgコマンドでフォアグラウンドに持ってこれるプログラムを指します。

jobsコマンドでも確認できます。

制御端末のないプロセスは、代表的なものとしてデーモンがあります。

ここでは、本筋からそれますので、割愛します。

今回、自分の実行したプログラムのうち、2つはnohupコマンドで実行し、その端末をログアウトしたため、制御端末のないプロセスになっていました。

プロセスの制御端末の有無は、psコマンドのオプションxで確認できます。TTY欄が ? になっているのが制御端末のないプロセスです。

解決方法

psコマンドで、制御端末のないプロセスも監視するには、オプションでxをつけてください。

他のユーザーのプロセスも監視するオプションaをつけることでほぼ、topコマンドと同じ実行結果になると思います。

まとめ

topコマンドpsコマンド
プロセスを継続的に表示コマンド実行時のプロセスのみ表示
自分や他のユーザーのプロセスを表示自分のプロセスのみを表示
制御端末のないプロセスも表示制御端末のあるプロセスのみ表示

しかし、ps -axでtopコマンドとほぼ同じになります。

おススメ書籍

Linuxを学ぶ上で、おススメの書籍を紹介します。

Linux教科書 LPICレベル1 Version5.0対応

この書籍は、LPICというLinuxのプロフェッショナルとして認定される資格の教科書になります。

資格の教科書ですが、Linuxを学ぶ上でもってこいの書籍です。自分は、この書籍でLPICを取得しました。


Linux教科書 LPICレベル1 Version5.0対応
新しいLinuxの教科書

初めてLinuxを触る人でも分かりやすく表現されており、読みやすいです。


新しいLinuxの教科書