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
35
プロセスの生成 fork編
以下動画のテキストです。
https://youtu.be/d65eCrW5wY0
Satoru Takeuchi
PRO
December 28, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
絶対殺すSIGKILLシグナルと絶対死なないプロセス
sat
PRO
3
65
シェルのセッション
sat
PRO
2
26
RubyでKubernetesプログラミング
sat
PRO
4
180
プロセスの生成 exec編
sat
PRO
1
37
プロセスの生成 fork&exec編
sat
PRO
0
32
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
31
静的ライブラリと 共有ライブラリの違いを実験で確認
sat
PRO
1
54
ハイテク休憩
sat
PRO
2
210
利きプロセススケジューラ
sat
PRO
5
3.3k
Other Decks in Technology
See All in Technology
リーダブルテストコード 〜メンテナンスしやすい テストコードを作成する方法を考える〜 #DevSumi #DevSumiB / Readable test code
nihonbuson
11
4.2k
開発スピードは上がっている…品質はどうする? スピードと品質を両立させるためのプロダクト開発の進め方とは #DevSumi #DevSumiB / Agile And Quality
nihonbuson
1
440
2.5Dモデルのすべて
yu4u
2
450
10分で紹介するAmazon Bedrock利用時のセキュリティ対策 / 10-minutes introduction to security measures when using Amazon Bedrock
hideakiaoyagi
0
160
テストアーキテクチャ設計で実現する高品質で高スピードな開発の実践 / Test Architecture Design in Practice
ropqa
3
550
FastConnect の冗長性
ocise
1
9.5k
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
280
Developer Summit 2025 [14-D-1] Yuki Hattori
yuhattor
17
3.7k
Larkご案内資料
customercloud
PRO
0
600
Data-centric AI入門第6章:Data-centric AIの実践例
x_ttyszk
1
340
AIエージェントについてまとめてみた
pharma_x_tech
20
14k
君はPostScriptなウィンドウシステム 「NeWS」をご存知か?/sunnews
koyhoge
0
710
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
20
2.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Writing Fast Ruby
sferik
628
61k
A Tale of Four Properties
chriscoyier
158
23k
KATA
mclloyd
29
14k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
GraphQLとの向き合い方2022年版
quramy
44
13k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Music & Morning Musume
bryan
46
6.3k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
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