Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
プロセスの生成 fork&exec編
Search
Satoru Takeuchi
PRO
December 29, 2024
Technology
120
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
119-多機能ファイルシステムBtrfs_のコピー.pdf
sat
PRO
1
72
Linuxカーネルの インタフェースは変わりうる?
sat
PRO
1
98
あなたの知らないバージョン命名規則
sat
PRO
3
910
Rook: Intro and Deep Dive with Ceph
sat
PRO
1
65
Machine Check Exception
sat
PRO
2
67
バイナリダンプの模様を読む
sat
PRO
0
91
cpコマンドはディスク上でデータを コピーしないことがある
sat
PRO
3
91
114-ファイルのshallow_copy.pdf
sat
PRO
2
59
113-Btrfsのスナップショット.pdf
sat
PRO
0
42
Other Decks in Technology
See All in Technology
プラットフォームを「作る」、 チームに「入り込む」
sansantech
PRO
0
390
Coil3を内部実装から読み解く~キャッシュ戦略とAVIF画像の描画〜/nikkei-tech-talk50
nikkei_engineer_recruiting
0
170
BedrockとLambdaで作る リアルタイム進行型推理ゲーム
kawametho
0
120
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
340
Databricksメトリクスビューはじめてのもくもく会
taka_aki
0
140
Terraformを用いたJamf Pro構成のIaC, GitOps化への挑戦
yukun
0
110
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
250
AIエージェントを安全で速い現場監督にする:Jev・Obsidian・メタハーネス
x5gtrn
PRO
0
140
Confitura 2026
logico_jp
0
100
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
240
AI臭い文章とは何なのか
nasuvitz
36
75k
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
120
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
590
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
540
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Marketing to machines
jonoalderson
1
5.8k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Building an army of robots
kneath
307
47k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5k
The Curse of the Amulet
leimatthew05
3
15k
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