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を学ぶ上で、おススメの書籍を紹介します。
この書籍は、LPICというLinuxのプロフェッショナルとして認定される資格の教科書になります。
資格の教科書ですが、Linuxを学ぶ上でもってこいの書籍です。自分は、この書籍でLPICを取得しました。
![](https://images-fe.ssl-images-amazon.com/images/I/51kkwZ88wIL._SL160_.jpg)
Linux教科書 LPICレベル1 Version5.0対応