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
シェルのセッション
Search
Satoru Takeuchi
PRO
February 08, 2025
Technology
2
29
シェルのセッション
以下動画のテキストです。
https://youtu.be/obf6qnCBkQU
Satoru Takeuchi
PRO
February 08, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
シェルのジョブ
sat
PRO
1
10
常駐サービスを実現するデーモンプロセス
sat
PRO
0
11
絶対殺すSIGKILLシグナルと絶対死なないプロセス
sat
PRO
3
74
RubyでKubernetesプログラミング
sat
PRO
4
180
プロセスの生成 exec編
sat
PRO
1
38
プロセスの生成 fork&exec編
sat
PRO
0
33
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
32
プロセスの生成 fork編
sat
PRO
0
36
静的ライブラリと 共有ライブラリの違いを実験で確認
sat
PRO
1
56
Other Decks in Technology
See All in Technology
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
11
3k
地方拠点で エンジニアリングマネージャーってできるの? 〜地方という制約を楽しむオーナーシップとコミュニティ作り〜
1coin
1
230
OpenID BizDay#17 KYC WG活動報告(法人) / 20250219-BizDay17-KYC-legalidentity
oidfj
0
260
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
18
6.9k
Developers Summit 2025 浅野卓也(13-B-7 LegalOn Technologies)
legalontechnologies
PRO
1
860
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
770
「海外登壇」という 選択肢を与えるために 〜Gophers EX
logica0419
0
810
ユーザーストーリーマッピングから始めるアジャイルチームと並走するQA / Starting QA with User Story Mapping
katawara
0
210
【Developers Summit 2025】プロダクトエンジニアから学ぶ、 ユーザーにより高い価値を届ける技術
niwatakeru
2
1.4k
2/18/25: Java meets AI: Build LLM-Powered Apps with LangChain4j
edeandrea
PRO
0
130
CZII - CryoET Object Identification 参加振り返り・解法共有
tattaka
0
390
リーダブルテストコード 〜メンテナンスしやすい テストコードを作成する方法を考える〜 #DevSumi #DevSumiB / Readable test code
nihonbuson
11
7.4k
Featured
See All Featured
Done Done
chrislema
182
16k
Facilitating Awesome Meetings
lara
52
6.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
How to Ace a Technical Interview
jacobian
276
23k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
GraphQLとの向き合い方2022年版
quramy
44
13k
Transcript
シェルのセッション Feb. 8th, 2025 Satoru Takeuchi X: satoru_takeuchi 1
シェルのセッション • ログインしてシェルが立ち上がってからログアウトしてシェルが終了するまでの期間 • ログインセッションとも呼ばれる • カーネルのセッション機能を使っている 2
カーネルのセッション機能 • 各セッションにはセッションID(SID)が割り当てられる • セッションを開始したプロセス(bashなど)がセッションリーダーとなる • 端末(デバイス名はttyXやptyX)に結びついている ◦ 📝 その33「端末デバイス」
◦ ほとんどの場合はgtermのような疑似端末に結びついている ◦ よくわからなければ「文字だらけの白黒のウィンドウ」くらいの感覚でよいです • ログインセッションでないセッションもある ◦ 📝 別動画で紹介予定 3
セッションIDの表示 • bashからps ajxを実行 4 $ ps ajx PPID PID
PGID SID TTY TPGID STAT UID TIME COMMAND ... 19261 19262 19262 19262 pts/0 19647 Ss 1000 0:00 -bash ... 19262 19647 19647 19262 pts/0 19647 R+ 1000 0:00 ps ajx ...
システムに複数のログインセッションが存在する場合 5 Aさんのセッション: go build & vim Bさんのセッション1: ps aux
| less Bさんのセッション2: sleep 10 bash go build zsh ps aux less vim zsh sleep 10 セッション 端末 pty/0 pty/1 pty/2
セッションに紐付く端末が末の接続が切れると… • カーネルがセッションリーダー(bashなど)にSIGHUPを送る • bashはSIGHUPのハンドラで同じセッションに属する全ジョブにSIGHUPを送って から終了 ◦ ジョブはパイプで繋がれた一連のプロセス ▪ 📝
別動画で解説予定 ◦ ジョブにSIGHUPを送る ~= プロセスにSIGHUPを送る ◦ プロセスはSIGHUPを受信するとデフォルトで終了する • 疑似端末ウィンドウを閉じると端末から実行したプロセスが全部終了するのはこの 仕組みによるもの 6
プロセスを終了させたくなければ… • プログラムでの対処 ◦ SIGHUPを無視するコードを書く ◦ SIGHUPのシグナルハンドラを設定して、このシグナルを受信しても終了しないようにする • 便利コマンド ◦
nohupコマンド ▪ SIGHUPを無視する設定にしたうえでプログラムを起動する ◦ bashのdisown組み込みコマンド ▪ ジョブ(プロセスのかたまり)をbashの管理下から外す ▪ bashがSIGHUPを受け取ってもdisownしたジョブにはSIGHUPを送らない 7
まとめ • ログインしてからシェルが立ち上がってログアウトしてシェルが終了するまでに保持 される期間をセッションと呼ぶ • カーネルのセッション機能に結びついている • セッションは端末に結びついている ◦ 端末の接続が切れると通常はセッションに紐づくプロセスはすべて終了する
◦ nohupコマンドやbashのdisown組み込みコマンドを使うと終了を避けられる 8