Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プロセスの生成 fork編
Search
Satoru Takeuchi
PRO
December 28, 2024
Technology
0
69
プロセスの生成 fork編
以下動画のテキストです。
https://youtu.be/d65eCrW5wY0
Satoru Takeuchi
PRO
December 28, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
eBPF
sat
PRO
1
93
waruiBPF
sat
PRO
0
87
eBPFとwaruiBPF
sat
PRO
4
2.6k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
0
87
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
170
様々なファイルシステム
sat
PRO
0
320
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
410
ソースを読むプロセスの例
sat
PRO
22
17k
メモリマップトファイル
sat
PRO
1
160
Other Decks in Technology
See All in Technology
ChatGPTで論⽂は読めるのか
spatial_ai_network
11
29k
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
440
IAMユーザーゼロの運用は果たして可能なのか
yama3133
2
500
Power of Kiro : あなたの㌔はパワステ搭載ですか?
r3_yamauchi
PRO
0
180
AIの長期記憶と短期記憶の違いについてAgentCoreを例に深掘ってみた
yakumo
4
460
学習データって増やせばいいんですか?
ftakahashi
2
510
エンジニアリングをやめたくないので問い続ける
estie
2
1.2k
mairuでつくるクレデンシャルレス開発環境 / Credential-less development environment using Mailru
mirakui
5
550
たまに起きる外部サービスの障害に備えたり備えなかったりする話
egmc
0
310
re:Invent2025 コンテナ系アップデート振り返り(+CloudWatchログのアップデート紹介)
masukawa
0
390
Lookerで実現するセキュアな外部データ提供
zozotech
PRO
0
170
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
940
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
400
Code Reviewing Like a Champion
maltzj
527
40k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
47k
So, you think you're a good person
axbom
PRO
0
1.8k
How to build a perfect <img>
jonoalderson
0
4.6k
A Tale of Four Properties
chriscoyier
162
23k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
39
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
28
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Skip the Path - Find Your Career Trail
mkilby
0
22
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
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