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
プロセスの生成 fork編
Search
Satoru Takeuchi
PRO
December 28, 2024
Technology
0
32
プロセスの生成 fork編
以下動画のテキストです。
https://youtu.be/d65eCrW5wY0
Satoru Takeuchi
PRO
December 28, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
RubyでKubernetesプログラミング
sat
PRO
4
170
プロセスの生成 exec編
sat
PRO
1
35
プロセスの生成 fork&exec編
sat
PRO
0
28
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
28
静的ライブラリと 共有ライブラリの違いを実験で確認
sat
PRO
1
46
ハイテク休憩
sat
PRO
2
200
利きプロセススケジューラ
sat
PRO
5
3.3k
俺とVSCode Python Debugger Extension
sat
PRO
1
210
コード再利用のしくみ ライブラリ
sat
PRO
3
84
Other Decks in Technology
See All in Technology
論文紹介 ”Long-Context LLMs Meet RAG: Overcoming Challenges for Long Inputs in RAG” @GDG Tokyo
shukob
0
230
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.7k
MicrosoftのOSSだけでAIによるブラウザテストを構成する
ymd65536
1
220
LLM活用の現在とこれから:LayerXにおける事例とともに 2025/1 ver. / layerx-llm-202501
yuya4
3
240
Tokyo RubyKaigi 12 - Scaling Ruby at GitHub
jhawthorn
2
120
実践!生成AIのビジネス活用 / How to utilize Generative AI in your own business
gakumura
1
190
Autify Company Deck
autifyhq
2
41k
コスト削減と精度維持を両立!類似画像検索システムの内製化成功事例
shutotakahashi
0
320
大学教員が押さえておくべき生成 AI の基礎と活用例〜より効率的な教育のために〜
soh9834
1
160
AIアプリケーション開発でAzure AI Searchを使いこなすためには
isidaitc
1
250
バクラクの組織とアーキテクチャ(要約)2025/01版
shkomine
2
270
サーバレスの未来〜The Key to Simplifying Everything〜
kawaji_scratch
2
330
Featured
See All Featured
Facilitating Awesome Meetings
lara
51
6.2k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
It's Worth the Effort
3n
184
28k
Site-Speed That Sticks
csswizardry
3
290
The Cost Of JavaScript in 2023
addyosmani
47
7.2k
Automating Front-end Workflow
addyosmani
1367
200k
Bash Introduction
62gerente
610
210k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Making the Leap to Tech Lead
cromwellryan
133
9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
39
1.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
510
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Transcript
プロセスの生成 fork編 Dec. 28th, 2024 Satoru Takeuchi X: satoru_takeuchi 1
はじめに • Linuxで新しいプロセスを生成する関数, forkについて説明 • 備考 ◦ forkは難しい。初見でわからなくても問題ない ◦ Linuxの実際のforkの挙動ではなく、その簡略版の説明をしている
▪ ここで説明するコピーオンライトの仕組みを使わないもの ▪ コピーオンライトも一気に説明するのは消化不良になりそうなので、そっちは後日説明 2
fork()とは • プロセスを生成する関数 • プロセスの生成といえば「bashがechoプログラムを新規作成」というようなイメージ を持つと思うが、forkがやることは異なる • forkがやるのは「実行中のプログラムの複製」 ◦ 実行の流れを分岐させるので
forkという名前が付いている • 「bashがechoプログラムを新規作成」ということをしたければfork()の後にexec()を 呼び出す ◦ exec()については後日説明 3
fork(): CPU上で動作する処理の観点 • CPU0上で動く親プロセスがfork()を呼ぶ • fork()後にCPU0上で親プロセスが、CPU1上で子プロセスが動く 4 CPU0 CPU1 fork()呼び出し
fork()から復帰 fork()から復帰 親プロセス カーネル 親プロセス 子プロセス 処理が分岐(fork)
fork: 物理メモリの観点 5 親プロセスの メモリ (1) fork呼び出し時 カーネルの メモリ 親プロセスの
メモリ カーネルの メモリ 親プロセスの メモリ カーネルの メモリ コピー 子プロセスの メモリ 子プロセスの メモリ CPU0上で 実行中のコード (2) カーネルによるfork()の処理 (3) fork()復帰後 CPU0上で 実行中のコード CPU0上で 実行中のコード CPU1上で 実行中のコード
コード: fork.py #!/usr/bin/python3 import os, sys ret = os.fork() if
ret == 0: print("子プロセス: pid={}, 親プロセスのpid={}".format(os.getpid(), os.getppid())) exit() elif ret > 0: print("親プロセス: pid={}, 子プロセスのpid={}".format(os.getpid(), ret)) exit() sys.exit(1) 6
まとめ • Linuxではfork()関数でプロセスを生成する • 全く別のプログラムからプロセスを生み出すのではなく、同じプロセスを複製する ◦ 別プログラムの実行には exec()を使う 7