2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linuxのプロセスとは

Last updated at Posted at 2021-03-26

#プロセスとは

動いているプログラムのこと。
確認するためのツールは、使用するOSによって異なる。

Windows タスクマネージャー
Linux モニター
macOS アクティビティモニター

#プロセスの生成
コンピューターでは、複数の処理が同時に行われており、その一つ一つの処理をプロセスとして管理されている。

ターミナルで、lsコマンドを使用するとき、lsコマンドが実行される。
この時、lsのプロセスが生成される。

シェルのプロセスは、ログイン後あるいはターミナルの起動と共に開始されて、ログアウトまたはターミナルを閉じるまでメモリに保持される。

#プロセスIDとは
プロセスには固有の番号が割り当てられる。それをプロセスID(PID)と呼ぶ。

#プロセスの確認方法(コマンド)
LinuxのプロセスはPSコマンドで調べることができる。

psコマンドで見ることができる情報は、以下。

PID TTY TIME CMD
プロセスID ターミナルの一時的な名前 CPUの稼働時間 コマンド

実際に実行してみると

$ ps
PID TTY     TIME CMD
7483 pts/1  00:00:00 zsh
9884 pts/1  00:00:00 ps

#tty

TTY:teletypewriterの略
古い歴史がある。
UNIX黎明期に大量に使われていた端末がテレタイプライター。
コンピュータからの出力は、現在のような画面ではなくて、長い紙に打ち出されていた。人間からの入力には、紙テープやタイプライターが使われていた。
この端末からttyという名称が来ている。

そして、現在では、ハードウェアだった端末をソフトウェアにしてしまったのが、端末エミュレータである。
例:GNOME terminal, Konsole, mltermなど。

端末を識別するために端末の1つ1つにpts/0のような一時的な名前が割り振られる。

psコマンド単体では、自分のプロセスのみ表示されるが、aをつけることですべてのプロセスを見ることができる。
すべてというのは、SSHで接続したターミナルのプロセスや、複数のターミナルを開いた状態で端末が仮想的に複数存在してるときのすべてのプロセスということである。

以下では、現在psコマンドを使った端末には、pts/0が割り当てられて、
他に開いている端末には、pts/1が割り当てられる

$ ps a
PID TTY     TIME CMD
3133 pts/0  00:00:00 zsh
9884 pts/0  00:00:00 ps
7483 pts/1  00:00:00 zsh

ターミナルをもっと開いていくと、pts/2, pts/3..とどんどん割り当てられていく。閉じると、割り当てが解除される。解除された名前は、次にターミナルが開かれたときにその名前が使われる。それは同じターミナルを示しているわけではなく、ただの識別するためのものである。

#psとシェルが別々に表示されているが違いは?

psを実行するとシェルとpsが表示されている。
それは、psがextarnal コマンドであるからである。

internal command

cd , source , fg など
シェルに組み込まれているコマンド。
シェルに組み込まれているので、新しいプロセスを生成せず実行されるので、実行速度がとても早い。

External command

ls , catなど
シェルに組み込まれていないコマンド。
そのコマンドは、呼ばれるたびに新しいプロセスを生成する。

internal コマンドが呼ばれるとシェルのタイムが加算される。
psを実行したときに、psも表示されるがこれはpsはextarnalコマンドであり、新しくプロセスが生成されているからであり、outputが出力される時には、プロセスが終了している。

internalかexternal か判別する方法は、typeコマンドを使用する。

$ type cat 
cat is /bin/cat

$ type cd
cd is a shell builtin

#internal コマンドのTIMEの変化を見てみる

internal コマンドが呼ばれるとシェルのタイムが加算される。基本的に起動してpsを実行すると0である。

そこで以下を実行すると

$ while 
do 
x=1
done

終了するときはctr+Cをおす。
そして、psコマンドで確認すると実行された時間だけzsh(シェル)のtimeが加算されている

$ ps
PID TTY     TIME CMD
7483 pts/1  00:00:02 zsh
9884 pts/1  00:00:00 ps

#external コマンドのプロセスの動きを見る

yesというコマンドがある。これは、プロセスが止まるまで(killされる)までyesを出力し続ける。今回は /dev/nullに出力し続ける。

  • /dev/null に出力されるものはすべて破棄されて、何も表示されない。

コマンドをバックグラウンドで実行する

コマンドを入力するとコマンドが終了するまで待たなければいけない。その間他のコマンドを打つことはできない。
しかし、時間がかかり他のコマンドを使いたい場合や、今回のようにプロセスを確認したい場合は&を使用することでバックグラウンドで実行することができる。

$ yes > /dev/null &
[1] 9880

これでバックグラウンドでプロセスID 9880として、yesコマンドが実行され続けている。
この状態でpsを確認してみると

$ ps
PID TTY     TIME CMD
7483 pts/1  00:00:00 zsh
9800 pts/1  00:00:50 yes
9884 pts/1  00:00:00 ps

yesコマンドのプロセスが生成されていて、50秒間実行されているということがわかる。

#プロセスを終了(kill)する

プロセスをコマンド終了させることができる。その時には、killコマンドを使う。
killの引数にはプロセスIDを渡す。
そのほかkillall などある。

####参考
https://www.theunixschool.com/2012/09/ps-command-what-does-time-indicate.html?m=1
https://www.theunixschool.com/2012/03/internal-vs-external-commands.html
https://www.howtogeek.com/428174/what-is-a-tty-on-linux-and-how-to-use-the-tty-command/
https://www.atmarkit.co.jp/ait/articles/1706/23/news010.html

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?