ジョブとは
bashのようなシェルがバックグラウンドで実行したプロセスを制御するための仕組みです。
ジョブを見る
root@*********:*************# sleep infinity &
[1] 2460
root@*********:*********# sleep infinity &
[2] 2464
root@*********:*********# jobs
[1]- 実行中 sleep infinity &
[2]+ 実行中 sleep infinity &
root@*********:*********# fg 1
sleep infinity
^Z
[1]+ 停止 sleep infinity
root@*********:*********# bg 1
[1]+ sleep infinity &
気づき
PIDの横の[1]がジョブの番号
一つずつ ジョブ番号が違う。
セッションとは
ユーザがgtermのような端末エミュレータ、あるいはsshなどを通してシステムにログインしたきのログインシェルに対応するもの
です。全てのセッションには、セッションを制御するための端末
が紐づいています。
...
セッション内プロセスを操作したいときは、端末を介してシェルを始めとしたプロセスに対して指示をし、また、それらプロセスの出力を受け取ります
出典
GNOME デスクトップにログインしてから、ログアウトするまでの間をセッション
といいます。 ログインマネージャによってユーザーが認証されると、セッションマネージャが開始されます。 ユーザーは、セッションマネージャによりセッションを管理できます。 たとえば、セッションの状態を保存して、次回ログインしたときにそのセッションに戻ることができます。
出典
GNOME
今回は、デスクトップ環境「GNOME」について紹介します。
まず、デスクトップ環境とは、以前も取り上げたように、「X Window System」や「Wayland」の上で動作する、GUIによる作業環境を提供
するものです。ツールバーやアイコン、ウィンドウマネージャ、ファイルマネージャなどのソフトウェアをまとめたもので、「デスクトップ作業を行うのに必要なソフトウェアのセット
」と言うことができます。
GNOMEは、GNUプロジェクトの一部として開発されており、すべてをフリーソフトウェアで作るというポリシーの下で開発されています。「グノーム」と読む人が多いのですが、Gを発音せず「ノーム」と読む人もいます。1999年に開発が始まっており、比較的長い歴史を持っています。
GNOMEは、登場当初、WindowsやMac OS Xに似たインターフェイスを提供したため、Linux初心者の人気を集めました。その反面、高いカスタマイズ性を持ち、ユーザの好みの通りのデスクトップを構築できるという特徴もあり、またWaylandとの親和性も向上していることから、今なお多くの人が利用するデスクトップ環境です。
GNOMEを語る上で忘れることができないのが、ファイルマネージャ「Nautilus」です。Nautilusは、ファイルやディレクトリのブラウズだけでなく、Webサイトのブラウズも行うことができるソフトウェアで、ファイルやアプリケーション、インターネット上のリソースなどを統合し、リソースに素早くアクセスできるようになっています。
多くのディストリビューションでも採用されているため、必ず覚えておきたいデスクトップ環境
です。
出典
気づき
扱う端末が違うとセッションも違ってくるのか
セッションと仮想ターミナルをみてみる
root@*********:**********# ps ajx
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 1 1 1 ? -1 Ss 0 0:01 /sbin/init s
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
...
2450 2626 2626 2435 pts/0 2629 S 0 0:00 sleep infini
2450 2628 2628 2435 pts/0 2629 S 0 0:00 sleep infini
2450 2629 2629 2435 pts/0 2629 R+ 0 0:00 ps ajx
気づき
sleep infinityとps ajxのコマンドが同じセッションID、同じTTY(仮想ターミナルになっている)
違うタブでするとどこか違うところが出てくるのか?
同じターミナルで違うタブで入力してみた
vboxuser@***********:~/study$ sleep infinity &
[1] 2704
2450 2626 2626 2435 pts/0 2450 S 0 0:00 sleep infini
2450 2628 2628 2435 pts/0 2450 S 0 0:00 sleep infini
2 2632 0 0 ? -1 I 0 0:01 [kworker/0:0
2 2660 0 0 ? -1 I 0 0:00 [kworker/u2:
2424 2691 2691 2691 pts/1 2706 Ss 1000 0:00 bash
2 2703 0 0 ? -1 I 0 0:00 [kworker/0:2
2691 2704 2704 2691 pts/1 2706 S 1000 0:00 sleep infini
2691 2706 2706 2691 pts/1 2706 R+ 1000 0:00 ps ajx
気づき
違うタブで入力するとセッションIDも仮想ターミナルも違うことになった。
プロセスグループ
複数のプロセスをまとめてコントロール
するためのものです。セッションの中には複数のプロセスが存在します。
...
killコマンドのプロセスIDを指定する引数にマイナス値を指定
すると、プロセスグループにシグナルを投げられます。
例えばPGIDが100であるプロセスグループにシグナルを投げたい時はkill -100
とすれば良いです。
root@*********:**********# ps ajx
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 1 1 1 ? -1 Ss 0 0:01 /sbin/init s
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
...
2450 2626 2626 2435 pts/0 2629 S 0 0:00 sleep infini
2450 2628 2628 2435 pts/0 2629 S 0 0:00 sleep infini
2450 2629 2629 2435 pts/0 2629 R+ 0 0:00 ps ajx
同じプロセスグループを見つける
プロセスグループは単純なsleep infintyだとそれぞれのPGIDがつくが、プロセスが新たに子プロセスを作ったら同じPGIDになると思う。
#!/usr/bin/python3
import os, sys
ret = os.fork()
if ret == 0:
print("子プロセス:pid={}, 親プロセスのpid={}, PGID={}".format(os.getpid(), os.getppid(), os.getpgid(os.getpid())))
exit()
elif ret > 0:
print("親プロセス:pid={}, 子プロセスのpid={},PGID={}".format(os.getpid(), ret, os.getpgid(os.getpid())))
exit()
sys.exit(1)
root@*********:************# python3 fork.py
親プロセス:pid=86215, 子プロセスのpid=86216,PGID=86215
root@************:**********# 子プロセス:pid=86216, 親プロセスのpid=1730, PGID=86215
気づき
親プロセス、子プロセスともにPGID=86215になっている
デーモン
デーモンは常駐プロセス
のことです。
...
システムの開始から終了までの存在
し続けます。
...
- 端末から入出力する必要がないので、
端末が割り当てられない
。 - あらゆるログインセッションが終了しても影響を受けないように、
独自のセッションを持つ
。 - デーモンが生成したプロセスがデーモンの終了を気にしなくていいように
initが親
になっている。
出典
感想
まだまだ初歩的な投稿は続きます