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&exec編
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Satoru Takeuchi
PRO
December 29, 2024
Technology
98
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
プロセスの生成 fork&exec編
以下動画のテキストです
https://youtu.be/DLSho8DvdUk
Satoru Takeuchi
PRO
December 29, 2024
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
システム強制終了時にファイルシステムの整合性を保つ~ コピーオンライト編 ~
sat
PRO
0
53
システム強制終了時に ファイルシステムの整合性を保つ ~ ジャーナリング編 ~
sat
PRO
1
57
ファイルシステムの整合性を回復するfsck
sat
PRO
1
59
小学校5,6年生向けキャリア教育 大人になるまでの道
sat
PRO
8
4.8k
ファイルシステムの不整合
sat
PRO
2
150
書籍執筆での生成AIの活用
sat
PRO
2
510
ChatGPTに従って体調管理2026
sat
PRO
0
180
eBPF
sat
PRO
1
160
waruiBPF
sat
PRO
0
150
Other Decks in Technology
See All in Technology
Databricks における 生成AIガバナンスの実践
taka_aki
1
370
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
3
2k
Microsoft Build Keynoteふりかえり
tomokusaba
0
120
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
1.9k
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
120
チームで実践する AI-DLC 思考の軌跡を残すチェックポイント設計
belongadmin
0
3.2k
EventBridge Connection
_kensh
5
680
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
430
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
860
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
530
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
120
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
4
2.9k
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
First, design no harm
axbom
PRO
2
1.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Facilitating Awesome Meetings
lara
57
7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
150
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Skip the Path - Find Your Career Trail
mkilby
1
140
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Transcript
プロセスの生成 fork&exec編 Dec. 29th, 2024 Satoru Takeuchi X: satoru_takeuchi 1
はなすこと • あるプログラムを実行しているプロセスから別のプログラムを別プロセスとして実行 する方法 ◦ 要するに「bashからechoコマンドを実行するコードはどうなっているのか?」ということ • forkの後にexecを呼ぶことで実現する 2
fork&exec: CPU上で動作する処理の観点 1. CPU0上で動く親プロセスがfork()を呼ぶ 2. fork()後にCPU0上で親プロセスが、CPU1上で子プロセスが動く 3. 子プロセスがexec()を呼びプログラムBを実行 3 CPU0
CPU1 fork()呼び出し fork()から復帰 fork()から復帰 親プロセス (プログラムA) カーネル 親プロセス (プログラムA) 子プロセス (プログラムA) 処理が分岐(fork) カーネル 子プロセス (プログラムB) exec()呼び出し exec()から復帰
fork&exec: 物理メモリの観点 4 親プロセスの メモリ (プログラムA) (1) fork呼び出し時 カーネルの メモリ
親プロセスの メモリ (プログラムA) カーネルの メモリ 子プロセスの メモリ (プログラムA) CPU0上で 実行中のコード (2) fork()復帰後 (3) exec()復帰後 CPU0上で 実行中のコード CPU1上で 実行中のコード 親プロセスの メモリ (プログラムA) カーネルの メモリ 子プロセスの メモリ (プログラムB) CPU1上で 実行中のコード CPU0上で 実行中のコード
コード: fork-and-exec.py #!/usr/bin/python3 import os, sys ret = os.fork() if
ret == 0: print("子プロセス: pid={}, 親プロセスのpid={}".format(os.getpid(), os.getppid())) os.execve("/bin/echo", ["echo", "pid={} からこんにちは ".format(os.getpid())], {}) exit() elif ret > 0: print("親プロセス: pid={}, 子プロセスのpid={}".format(os.getpid(), ret)) exit() sys.exit(1) 5
実行結果 $ ./fork-and-exec.py 親プロセス: pid=137998, 子プロセスのpid=137999 子プロセス: pid=137999, 親プロセスのpid=137998 pid=137999
からこんにちは 6
まとめ • あるプログラムを実行しているプロセスから別のプログラムを別プロセスとして実行 するにはforkとexecを併用する ◦ まわりくどいうようだが本当にこうなっている ◦ こういうことをするposix_spawnという関数もあるが、内部的には fork,execを順番に呼び出している だけ
• 過去動画で説明した「CoWを使った実際のfork」の挙動がわかればうれしさがわ かってくる。これについては後日紹介 7