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
65
プロセスの生成 fork編
以下動画のテキストです。
https://youtu.be/d65eCrW5wY0
Satoru Takeuchi
PRO
December 28, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
98
様々なファイルシステム
sat
PRO
0
290
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
370
ソースを読むプロセスの例
sat
PRO
22
16k
メモリマップトファイル
sat
PRO
1
140
「Linux」という言葉が指すもの
sat
PRO
4
230
APIとABIの違い
sat
PRO
5
220
ファイルシステムへのアクセス方法
sat
PRO
0
88
ファイルシステム
sat
PRO
1
81
Other Decks in Technology
See All in Technology
IBC 2025 動画技術関連レポート / IBC 2025 Report
cyberagentdevelopers
PRO
2
250
AIとの協業で実現!レガシーコードをKotlinらしく生まれ変わらせる実践ガイド
zozotech
PRO
2
310
kotlin-lsp の開発開始に触発されて、Emacs で Kotlin 開発に挑戦した記録 / kotlin‑lsp as a Catalyst: My Journey to Kotlin Development in Emacs
nabeo
2
290
日本のソブリンAIを支えるエヌビディアの生成AIエコシステム
acceleratedmu3n
0
120
AIエージェントによる業務効率化への飽くなき挑戦-AWS上の実開発事例から学んだ効果、現実そしてギャップ-
nasuvitz
5
1.6k
AIがコードを書いてくれるなら、新米エンジニアは何をする? / komekaigi2025
nkzn
24
17k
re:Inventに行くまでにやっておきたいこと
nagisa53
0
1k
Amazon Q Developer CLIをClaude Codeから使うためのベストプラクティスを考えてみた
dar_kuma_san
0
320
Open Table Format (OTF) が必要になった背景とその機能 (2025.10.28)
simosako
3
630
InsightX 会社説明資料/ Company deck
insightx
0
190
251029 JAWS-UG AI/ML 退屈なことはQDevにやらせよう
otakensh
0
180
初海外がre:Inventだった人間の感じたこと
tommy0124
1
180
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
The Pragmatic Product Professional
lauravandoore
36
7k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
RailsConf 2023
tenderlove
30
1.3k
For a Future-Friendly Web
brad_frost
180
10k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
950
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Making Projects Easy
brettharned
120
6.4k
Why Our Code Smells
bkeepers
PRO
340
57k
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