SlideShare une entreprise Scribd logo
1  sur  21
シグナルシグナル
USP 友の会
今泉光之
@bsdhack
https://bsdhack.org
シグナル 2
講師講師
● 今泉光之
 UNIX/Linux環境でのプログラミングを中心に、ネットワークや
インフラなども含め20年以上に渡る経験だけは積んできました。
 当初はC言語でコンパイラ、Xサーバ、ドライバ、TCP/IPによる
通信などシステム系のプログラミングが主でしたが、最近はPerl
やPHPなどのWeb向けのLLも使っています。
シグナル 3
シグナルとはシグナルとは
● プロセス間通信の手段
● 非同期のイベントを通知する仕組み
● 宛先プロセスの処理に割り込む
シグナル 4
シグナルは割り込みシグナルは割り込み
シグナル 5
シグナルと割り込みシグナルと割り込み
● シグナルはソフトウェア由来
● 割り込みはハードウェア由来
※ 個人の感想であり、出典・一次ソースを示すものでは
ありません。
シグナル 6
シグナルの種類(抜粋)シグナルの種類(抜粋)
● ハングアップ (SIGHUP)
元々は電話が切れた事を通知した。シグナル番号 1 。
● 割り込み (SIGINT)
端末から割り込みキー (Ctrl+C) で発生。シグナル番号 2 。
● 終了 (SIGQUIT)
端末から終了キー (Ctrl+) で発生。シグナル番号3。
● 強制終了 (SIGTERM)
プロセスを強制的に終了させる。シグナル番号15.
シグナル 7
シグナル受信時の挙動シグナル受信時の挙動
● 無視する
何もなかったかの様に粛々と動作を続ける
● デフォルトの動作を実行する
システム( OS )によって定義された動作を実施する
● 捕捉する
独自の処理を定義して実施する
シグナル 8
シグナルハンドラシグナルハンドラ
● シグナルを受信した時に実行される処理
● 登録されていない場合は OS によってデフォルトの挙動
– SIGHUP プロセスの終了。
– SIGINT プロセスの終了。
– SIGQUIT プロセスの終了とコアダンプ。
– SIGTERM プロセスの終了。
シグナル 9
シグナルハンドラの登録シグナルハンドラの登録
●
シェルでは trap(1) を利用する
● 基本的にはシェルの組み込みコマンド
● シグナルの種類と受け取った時の処理を指定する
trap [ 処理 ] シグナル [ … シグナル ]
● シグナルはシンボルでも数字でも指定可能
シグナル 10
シグナルハンドラの複数指定シグナルハンドラの複数指定
●
シグナルの種類毎に複数の trap(1) を指定できる
trap 処理 1 HUP もしくは trap 処理 1 1
trap 処理 2 INT もしくは trap 処理 2 2
trap 処理 3 QUIT もしくは trap 処理 3 3
trap 処理 15 TERM もしくは trap 処理 15 15
シグナル 11
疑似シグナル疑似シグナル EXITEXIT
● 終了時のハンドラ。シグナル番号は 0
実際のシグナルではないが trap(1) に指定できる
● プロセスが終了するときに実行させる処理を登録
trap 終了処理 EXIT もしくは trap 終了処理 0
● シグナルを受信した場合も同様
trap 終了処理 0 1 2 3 15
シグナル 12
traptrap のアクションのアクション
●
trap(1) のアクションは省略可
– アクションを省略するとデフォルトの挙動に戻す
trap 1 2 3
●
trap(1) のアクションに空文字列を指定すると無視
trap '' 1 2 3
●
trap(1) のアクションは終了しない
明示的に exit(1) して終了させる必要がある
シグナル 13
bashbash のの traptrap
● シェルの組み込みなので機能に差がある
– bash の trap(1) はハンドラの一覧表示ができる
trap -p
シグナル 14
シグナルの送信シグナルの送信
●
kill(1) コマンド
kill [-s シグナル名 ][- 番号 ] PID[ …PID]
シグナル 15
シグナルの種類(再訪)シグナルの種類(再訪)
● 代表的なシグナル
– SIGILL不正命令 不正な命令の実行 4
– SIGBUS バスエラー 不正メモリ操作 7
– SIGFPE 浮動小数点例外 ゼロ除算など 8
– SIGSEGV セグメンテーション違反 不正メモリアクセス 11
– SIGPIPE パイプ書き込みエラー 相手がいないパイプ 13
– SIGUSR1 ユーザー定義シグナル 10
– SIGUSR2 ユーザー定義シグナル 11
シグナル 16
シグナルの用途シグナルの用途
● SIGHUP
設定の読み込みやログの再オープン処理など
● SIGCHLD
無視する事で子プロセスのゾンビ化を防止
● SIGUSR1
GNU dd(1) では進捗状況を表示
シグナル 17
特権的なシグナル特権的なシグナル
● 殆どのシグナルはプロセスが挙動を決められる
– 無視、特別な処理、デフォルトの挙動
● 例外的に挙動を決められないシグナル
– SIGKILL プロセスの強制終了。シグナル番号は 9 。
kill(1) コマンドで発生
– SIGSTOP 実行中断。シグナル番号は 19 。
端末から中断キー (Ctrl+Z) で発生
シグナル 18
緊急時に便利なシグナル緊急時に便利なシグナル
● 緊急時には Ctrl+Z が有効
trap '' 1 2 3 15
:
rm -rf *
●
kill -9 するためには pid を調べる必要がある(時間がかかる)
● 端末から Ctrl+Z すれば取りあえず停止する
シグナル 19
余談(1)余談(1)
● 初期のシグナル (SYSV シグナル ) は牧歌的
– システムコールの実行中のシグナル
停止してエラーリターンする
– ハンドラ実行中のハンドラは
実行されない様にする(デフォルトに戻る)
シグナル 20
余談(2)余談(2)
● 中期のシグナル (BSD シグナル ) は少し頑張った
– システムコールの実行中のシグナル
ハンドラを実行した後はシステムコールに戻る
– ハンドラ実行中のハンドラは
保留(ブロック)されてハンドラ終了後に届く
シグナル 21
余談(3)余談(3)
● 後期のシグナルは論理的(当社比)
– システムコールの名前を変える
signal(2) は sigaction(2) に
– ハンドラ実行中のハンドラは
シグナルマスクの概念を作って選択可能とした

Contenu connexe

Tendances

サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整えるサーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整えるFuminobu Takeyama
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Hiro Yoshioka
 
ほんとはこわくない Gentoo Linux
ほんとはこわくない Gentoo Linuxほんとはこわくない Gentoo Linux
ほんとはこわくない Gentoo Linuxgion_XY
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがないTakuto Matsuu
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo LinuxについてTakuto Matsuu
 
バグ報告・翻訳・パッケージング・コード修正・広報活動などなど―OSS に貢献してみるには?
バグ報告・翻訳・パッケージング・コード修正・広報活動などなど―OSS に貢献してみるには?バグ報告・翻訳・パッケージング・コード修正・広報活動などなど―OSS に貢献してみるには?
バグ報告・翻訳・パッケージング・コード修正・広報活動などなど―OSS に貢献してみるには?Fuminobu Takeyama
 
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmsphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmTakeshi Komiya
 
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28th0x0472
 
PXE で linux インストールな本 -1 スピンドルマシンも Linux 化-
PXE で linux インストールな本 -1 スピンドルマシンも Linux 化-PXE で linux インストールな本 -1 スピンドルマシンも Linux 化-
PXE で linux インストールな本 -1 スピンドルマシンも Linux 化-Kenichiro MATOHARA
 
FreeBSDで行こう for small server
FreeBSDで行こう for small serverFreeBSDで行こう for small server
FreeBSDで行こう for small serverTatsumi Naganuma
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability modeYuichiro Naito
 
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Takuto Matsuu
 
Baremetal rust for_windows
Baremetal rust for_windowsBaremetal rust for_windows
Baremetal rust for_windows明 高橋
 
TUI作業で便利なソフト2題
TUI作業で便利なソフト2題TUI作業で便利なソフト2題
TUI作業で便利なソフト2題shimadah
 
fdコマンドを使おう
fdコマンドを使おうfdコマンドを使おう
fdコマンドを使おうHideaki Miyake
 
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回ロボットシステム学2015年第5回
ロボットシステム学2015年第5回Ryuichi Ueda
 
S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presenKouhei Maeda
 

Tendances (20)

サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整えるサーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
 
Slide
SlideSlide
Slide
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 
ほんとはこわくない Gentoo Linux
ほんとはこわくない Gentoo Linuxほんとはこわくない Gentoo Linux
ほんとはこわくない Gentoo Linux
 
Preseeding Debian
Preseeding DebianPreseeding Debian
Preseeding Debian
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
 
バグ報告・翻訳・パッケージング・コード修正・広報活動などなど―OSS に貢献してみるには?
バグ報告・翻訳・パッケージング・コード修正・広報活動などなど―OSS に貢献してみるには?バグ報告・翻訳・パッケージング・コード修正・広報活動などなど―OSS に貢献してみるには?
バグ報告・翻訳・パッケージング・コード修正・広報活動などなど―OSS に貢献してみるには?
 
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmsphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
 
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
 
Gentoo Linuxの紹介
Gentoo Linuxの紹介Gentoo Linuxの紹介
Gentoo Linuxの紹介
 
PXE で linux インストールな本 -1 スピンドルマシンも Linux 化-
PXE で linux インストールな本 -1 スピンドルマシンも Linux 化-PXE で linux インストールな本 -1 スピンドルマシンも Linux 化-
PXE で linux インストールな本 -1 スピンドルマシンも Linux 化-
 
FreeBSDで行こう for small server
FreeBSDで行こう for small serverFreeBSDで行こう for small server
FreeBSDで行こう for small server
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability mode
 
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
 
Baremetal rust for_windows
Baremetal rust for_windowsBaremetal rust for_windows
Baremetal rust for_windows
 
TUI作業で便利なソフト2題
TUI作業で便利なソフト2題TUI作業で便利なソフト2題
TUI作業で便利なソフト2題
 
fdコマンドを使おう
fdコマンドを使おうfdコマンドを使おう
fdコマンドを使おう
 
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
 
S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presen
 

Similaire à シグナル

エンターブライズIoTLT vol.17 LT6 センサを大量に取得するデモ
エンターブライズIoTLT vol.17 LT6 センサを大量に取得するデモエンターブライズIoTLT vol.17 LT6 センサを大量に取得するデモ
エンターブライズIoTLT vol.17 LT6 センサを大量に取得するデモt-inuo
 
The current problems and future of the desktop Linux printing
The current problems and future of the desktop Linux printingThe current problems and future of the desktop Linux printing
The current problems and future of the desktop Linux printingNaruhiko Ogasawara
 
SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案Toshiki Tsuboi
 
Thriftを用いた分散型のNyancatを作ってきた
Thriftを用いた分散型のNyancatを作ってきたThriftを用いた分散型のNyancatを作ってきた
Thriftを用いた分散型のNyancatを作ってきたHuy Do
 
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!m ishizaki
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoShohei Hido
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementationsmasahitojp
 
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Yoshikazu Kawashima
 
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話ssuser551c92
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてTakuji Kawata
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞DMM.com
 
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントMasaki NIWA
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
コミュニケーションソフトウェアを創るということ
コミュニケーションソフトウェアを創るということコミュニケーションソフトウェアを創るということ
コミュニケーションソフトウェアを創るということKazuho Oku
 
Fuchsia概略その1
Fuchsia概略その1Fuchsia概略その1
Fuchsia概略その1l_b__
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkTakaaki Hoyo
 

Similaire à シグナル (20)

KOGEI & KAIT Funnel WS
KOGEI & KAIT Funnel WSKOGEI & KAIT Funnel WS
KOGEI & KAIT Funnel WS
 
エンターブライズIoTLT vol.17 LT6 センサを大量に取得するデモ
エンターブライズIoTLT vol.17 LT6 センサを大量に取得するデモエンターブライズIoTLT vol.17 LT6 センサを大量に取得するデモ
エンターブライズIoTLT vol.17 LT6 センサを大量に取得するデモ
 
The current problems and future of the desktop Linux printing
The current problems and future of the desktop Linux printingThe current problems and future of the desktop Linux printing
The current problems and future of the desktop Linux printing
 
SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
Thriftを用いた分散型のNyancatを作ってきた
Thriftを用いた分散型のNyancatを作ってきたThriftを用いた分散型のNyancatを作ってきた
Thriftを用いた分散型のNyancatを作ってきた
 
rzmq
rzmqrzmq
rzmq
 
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
 
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞
 
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
 
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrintingLL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
コミュニケーションソフトウェアを創るということ
コミュニケーションソフトウェアを創るということコミュニケーションソフトウェアを創るということ
コミュニケーションソフトウェアを創るということ
 
Fuchsia概略その1
Fuchsia概略その1Fuchsia概略その1
Fuchsia概略その1
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 Network
 

シグナル