Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
シェルのジョブ
Search
Satoru Takeuchi
PRO
February 23, 2025
Technology
1
42
シェルのジョブ
以下動画のテキストです。
https://youtu.be/LvuQqQvtork
Satoru Takeuchi
PRO
February 23, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
会社員しながら本を書いてきた知見の共有
sat
PRO
3
690
デバイスにアクセスするデバイスファイル
sat
PRO
1
31
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
24
デバイスドライバ
sat
PRO
0
37
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
84
共有メモリ
sat
PRO
3
60
マルチスレッドプログラム
sat
PRO
3
51
Linuxのブートプロセス initramfs編
sat
PRO
2
65
Linuxのブートプロセス
sat
PRO
6
170
Other Decks in Technology
See All in Technology
大事なのは、AIの精度だけじゃない!〜1円のズレも許されない経理領域とAI〜
jun_nemoto
10
5.1k
Data Hubグループ 紹介資料
sansan33
PRO
0
1.7k
アプリケーションの中身が見える!Mackerel APMの全貌と展望 / Mackerel APMリリースパーティ
mackerelio
0
440
エンジニア幼年期の終わり
rebase_engineering
1
110
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.6k
2025advance01
minamizaki
0
130
What's Next in OpenShift Q2 CY2025
redhatlivestreaming
1
710
Streamline Cloud-Native App Development Using CDEs
saeedzf
0
740
テストを実施する前に考えるべきテストの話 / Thinking About Testing Before You Test
nihonbuson
PRO
13
2k
Redmineの意外と知らない便利機能 (Redmine 6.0対応版)
vividtone
0
1.1k
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
12k
AIのための オンボーディングドキュメントを整備する - hirotea
hirotea
9
2.3k
Featured
See All Featured
Done Done
chrislema
184
16k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
The Power of CSS Pseudo Elements
geoffreycrofte
76
5.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
Rails Girls Zürich Keynote
gr2m
94
13k
Designing for Performance
lara
608
69k
Transcript
シェルのジョブ Feb. 23rd, 2025 Satoru Takeuchi X: satoru_takeuchi 1
シェルのジョブ • シェル上での1つのコマンド、またはパイプで繋がれた一連のプロセス • 2種類ある ◦ フォアグラウンドジョブ : 実行時に末尾に”&”を付けない(e.g. ps
ajx | less) ▪ 端末に直接アクセスできる ▪ セッションの中で常に 1つ ◦ バックグラウンドジョブ : 実行時に末尾に”&”を付ける(e.g. go build &) ▪ バックグラウンド(裏側)で実行 ▪ 端末に直接アクセスできない • アクセスするとフォアグラウンドプロセスになるまで待たされる ▪ セッションの中で複数存在できる 2
プロセスグループ 3 • カーネルの機能 • シェルのセッションはプロセスグループを使って実装している ◦ フォアグラウンドジョブ => フォアグラウンドプロセスグループ
◦ バックグラウンドジョブ => バックグラウンドプロセスグループ • パイプラインの最初のプロセスをプロセスグループリーダーと呼ぶ ◦ プロセスグループリーダーは端末の入出力を直接受け取る • プロセスグループごとに固有のID、プロセスグループIDが対応する ◦ プロセスグループIDはプロセスグループリーダーの PIDと等しい
セッションとジョブの関係 4 セッション プロセスグループ(ジョブ)1 (バックグラウンド) プロセスグループ(ジョブ)2 (フォアグラウンド) ps aux less
端末 go build bash 生成 生成&パイプでつなげる アクセス可 フォアグラウンド になるまで アクセスを待たさ れる
例 • “go build”はバックグラウンドジョブ(プロセスグループ)として実行 • “ps aux | less”はフォアグラウンドジョブ(プロセスグループ)として実行 5
$ go build & $ ps ajx | less PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND ... 19261 19262 19262 19262 pts/0 19653 Ss 1000 0:00 -bash ... 19262 19653 19653 19262 pts/0 19653 R+ 1000 0:00 ps ajx 19262 19654 19653 19262 pts/0 19653 S+ 1000 0:00 less ...
プロセスグループとシグナル • シグナルはプロセスグループに送れる ◦ プロセスグループ内の全プロセスにシグナルを送る ◦ “kill”コマンドの場合、例えば ”kill -100”を実行するとプロセスグループ (IDは100)にシグナルを送る
• 疑似端末上で”C-c”を押すとフォアグラウンドプロセスグループにSIGINTシグナル を送る ◦ バックグラウンドプロセスグループには送らないのでバックグラウンドプロセスは残る 6
まとめ • シェルのセッションにはジョブという概念がある • ジョブはカーネルのプロセスグループという機能によって実現している ◦ フォアグラウンドジョブ => フォアグラウンドプロセスグループ ▪
端末に直接アクセスできる ◦ バックグラウンドジョブ => バックグラウンドプロセスグループ ▪ 端末にアクセスすると待たされる • プロセスグループにシグナルを送信すると、所属する全プロセスにシグナルを送信 する 7