おさらい
前回まで学習した内容はこちらです
-
環境構築
→https://qiita.com/imagatasaki/items/4c510cacc6f17556c3b9 -
コマンドラインの操作方
-
基本的なコマンド①
→https://qiita.com/imagatasaki/items/37a7c12bce015d6bdc4a -
基本的なコマンド②(ファイル操作)
→https://qiita.com/imagatasaki/items/7abc96b0afea475077a2
→https://qiita.com/imagatasaki/items/6ccf0e1cd44ebe1d3e9b -
パーミッション
-
スーパーユーザー
→https://qiita.com/imagatasaki/items/39e081d9c10c1448e0c7 -
Vim
→https://qiita.com/imagatasaki/items/f4302837756102d0d430 -
リダイレクト
-
パイプライン
→https://qiita.com/imagatasaki/items/cfc37493ad95ee82c48d -
フィルタ
-
テキスト処理
→https://qiita.com/imagatasaki/items/737427c41a6d8dbc5fc0
今日学ぶこと
- プロセス
- プロセスの表示
- ジョブ
- ジョブの表示
プロセスとは
Linuxはプログラムの実行をプロセスという単位で管理している。
実行されているプログラムに対し、プロセスID等の情報を追加したまとまりで、管理しやすくなる。
メモリで実行されたタイミングでプロセスとなる。
メリットとしては例としてプロセスIDが存在することで、同じプログラムが実行された場合でも別のプロセスとわかる。
しっかり区別できるということである。
LinuxはマルチユーザーシステムのOSであることからデータが混ざってしまうなどのトラブルを防ぐためにもプロセスでの管理を行う。
プロセスの表示(psコマンド)
実行中のプロセスを表示する
現在実行中のプロセスを表示するためにはpsコマンドを使用する。
$ ps
PID TTY TIME CMD
1498 tty 00:00:00 bash
1519 tty 00:00:00 ps
上から順にBashのプロセス、psコマンドのプロセスとなる。
psコマンドを出力した際の列の意味はこちら。
列 | 意味 |
---|---|
PID | プロセスID |
TTY | 標準入出力に設定されている端末 |
TIME | CPUを使用した時間 |
CMD | コマンド名 |
プロセスがプログラムに対し情報が追加されたまとまりであることが確認できた。
詳細情報付きで表示する(uオプション)
詳細情報つきでプロセスを表示してみる
uオプションを使用するが「-」は前につけないという点に注意。(BSDオプション)
$ ps u
USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND
imagata 1498 0.0 0.1 115684 2348 tty1 Ss 13:57 0:00 -bash
imagata 1519 0.0 0.1 155448 1840 tty1 R+ 14:22 0:00 ps u
一番左側USERは「誰の権限で実行されたプロセスか」を表している。
他のユーザーが勝手に操作はできないようになっている。
端末を持たないプロセスも表示末う(xオプション)
$ ps x
xオプションを使用することで標準入出力に設定されている端末がないプロセスも表示できる。以下は一部
1572 ? Ss 0:00 [kworker/0:1]
このように端末が設定されていないプロセスをデーモンという。
見えないところで働いているというイメージ。
すべてのユーザーのプロセスを表示
psコマンドは現在ログインしているユーザーのプロセスのみ表示するが、aコマンドを使用することですべてのユーザーのプロセスを表示することが可能。
$ ps a
これらを利用してデーモンを含むすべてのユーザーのプロセスの数を数えてみる。
$ ps ax | wc -l
100
100と表示さているが、列名の行も含むため-1をした結果が正しい。
そのため99個であることがわかった。
ジョブとは
実行されているコマンドラインのことをジョブと呼ぶ。
例えば1行のコマンドラインにコマンドが2つ存在した場合、ジョブは1つ、プロセスは2つとなる。
視点を意識すると覚えやすい。
カーネル視点→コマンドの実行の単位
ユーザー視点→コマンドラインの実行の単位
ジョブの表示(jobsコマンド)
ジョブの一覧を表示するためにはjobsコマンドを使用する。
$ jobs
$
実行してみても何も表示されない。
これはコマンドラインを実行していないため。
$ man bash
bashのマニュアルを表示したあとCtrzを入力し、プロンプトに戻る。
再度jobsコマンドを実行すると、、、
$ jobs
$ [1]+ Stopped man bash
これは停止中のジョブを表示している。
左側の[1]はジョブ番号。プロセスでいったところのプロセスID
ただし、マシン内で一つの番号が割り当てられているわけではなく、シェルごとに割り当てられているため注意。
-lコマンドを使用するとプロセスIDも同時に表示できる。
$ jobs -l
$ [1]+ 1556 Stopped man bash
おつかれまでした
今回は少し短めの内容でした。
詳細情報を表示したりすると数値や英字が複数の列で表示されるので意味をよく理解していないと肌感が悪いですが、一つ一つ整理して覚えていけば怯えなくてよい。と思っています。
そして、プロセス、ジョブについて机上での学習で(資格勉強)なんとなく覚えておりましたが実際に動かして確認することでそれらが存在する意義がよく理解できたと思います。