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
14
プロセスの生成 fork編
以下動画のテキストです。
https://youtu.be/d65eCrW5wY0
Satoru Takeuchi
PRO
December 28, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
プロセスの生成 exec編
sat
PRO
1
12
プロセスの生成 fork&exec編
sat
PRO
0
5
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
5
静的ライブラリと 共有ライブラリの違いを実験で確認
sat
PRO
1
23
ハイテク休憩
sat
PRO
2
180
利きプロセススケジューラ
sat
PRO
5
3.2k
俺とVSCode Python Debugger Extension
sat
PRO
1
200
コード再利用のしくみ ライブラリ
sat
PRO
3
67
AWKへの愛を語る
sat
PRO
3
550
Other Decks in Technology
See All in Technology
Server-Side Engineer of LINE Sukimani
lycorp_recruit_jp
0
400
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
210
Wantedly での Datadog 活用事例
bgpat
2
760
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
400
Web APIをなぜつくるのか
mikanichinose
0
150
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
510
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
220
「完全に理解したTalk」完全に理解した
segavvy
1
170
サーバーなしでWordPress運用、できますよ。
sogaoh
PRO
0
130
Working as a Server-side Engineer at LY Corporation
lycorp_recruit_jp
0
420
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
240
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
270
Featured
See All Featured
Speed Design
sergeychernyshev
25
680
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Why Our Code Smells
bkeepers
PRO
335
57k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
A better future with KSS
kneath
238
17k
Raft: Consensus for Rubyists
vanstee
137
6.7k
GitHub's CSS Performance
jonrohan
1031
460k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
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