SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

直近開催のイベントはこちら!

HRzine×SmartHR 人材・組織活性化フォーラム

2024年12月6日(金)13:00~15:30

主要製品スペック一覧

人事業務の効率・確度・精度を高めるために欠かせないHRテクノロジー。その主な製品の機能を分野ごとに比較できる資料群です。製品検討の参考資料としてご活用ください。

eラーニング・LMS<br>主要製品スペック一覧 2024

eラーニング・LMS
主要製品スペック一覧 2024

その他のスペック一覧

人事労務管理システム<br>主要製品スペック一覧 2023

人事労務管理システム
主要製品スペック一覧 2023

タレントマネジメントシステム<br>主要製品スペック一覧 2023

タレントマネジメントシステム
主要製品スペック一覧 2023

ドラゴン大竹のLPICレベル1 弱点克服クラス(Ver 4対応)| 第3回

【LPICレベル1】弱点「シグナルによるプロセスの制御」を克服する


  • Facebook
  • X
  • Pocket
  • note
  • hatena

 Linuxでは終了メニューの選択や、内部処理が完了することでプロセスは終了しますが、killコマンドによるシグナル送信でも外部から終了できます。また、サーバプロセスに特定のシグナルを送信することで、設定ファイルの再読み込みやデータのダンプなどを行わせることができます。このようにシグナル送信によるプロセスの制御は、システムを管理をする上で大切な要素です。LPICレベル1試験でも、killコマンドやキーボード操作によるシグナル送信は「主題103 GNUとUnixのコマンド」で重要度4に指定されており、試験対策として理解必須の事項です。

  • Facebook
  • X
  • Pocket
  • note
  • hatena

シグナルによるプロセスの制御の仕組み

「シグナル」とは、割り込みによってプロセスに特定の動作をするように通知するための仕組みです。シグナルを受信したプロセスは、シグナルに応じた処理を実行します。シグナルを受信したときに実行する処理は、プログラムの中に関数として登録しておくことができます。この関数のことを「シグナルハンドラ」と呼びます。受信したシグナルに対応するシグナルハンドラがプロセスに登録されていない場合には、デフォルトのシグナルハンドラが実行されます。

プロセスの間でシグナルを送受信したときの動作イメージは次図のとおりです。図では、プロセス終了を意味するSIGTERMシグナルを送受信したときの様子を表しています。

プロセスの間でシグナルを送受信したときの動作イメージ
プロセスの間でシグナルを送受信したときの動作イメージ

シグナルにはたくさんの種類があります。主なものは次表のとおりです。送信するシグナルは「シグナル名」で指定しますが、実際に送信されるのは「シグナル番号」です。シグナルを受信するプロセスも、どのシグナルが届いたのかはシグナル番号で判別します。「動作」はデフォルトのハンドラが行う処理です。「表示メッセージ」は、デフォルトのハンドラが実行されたときに表示されるメッセージです。

Linuxの主なシグナル
シグナル番号 シグナル名 動作 表示メッセージ 説明 試験での重要度
1 SIGHUP 終了 Hangup 制御ターミナルのハングアップまたは制御プロセスの消滅 ★★★
2 SIGINT 終了 (表示なし) キーボード操作による割り込み(Ctrl+c) ★★★
3 SIGQUIT 終了+コアダンプ Quit (core dumped) キーボード操作による終了(Ctrl+\) -
9 SIGKILL 強制終了 Killed 強制終了 ★★★
11 SIGSEGV 終了+コアダンプ Segmentation fault (core dumped) 不正なメモリ参照 -
15 SIGTERM 終了 Terminated 終了 ★★★
18 SIGCONT 実行再開 (表示なし) 一時停止プロセスの再開 -
19 SIGSTOP 強制一時停止 (表示なし) 強制一時停止 -
20 SIGTSTP 一時停止 (表示なし) キーボード操作による一時停止(Ctrl+z) -

なお、SIGCONTSIGSTOPSIGTSTPの各シグナルは、CPUアーキテクチャによってシグナル番号が異なります。この表はx86アーキテクチャの場合の番号です。

シグナルの送信

シグナルは、killkillallpkillコマンドで送信できます。コマンドには送信するシグナルを指定しますが、指定を省略した場合にはSIGTERMシグナルが送信されます。また、指定するシグナル名では先頭の「SIG」を省略できます。例えば、SIGHUPシグナルは「HUP」、SIGINTシグナルは「INT」と書くことができます。

フォアグラウンドプロセスに対しては、上記の表のとおり、Ctrl+c、Ctrl+\、Ctrl+zの各キーボード操作によりシグナルを送信できます。

シグナルの受信

本稿の冒頭でも述べたとおり、シグナルを受信したプロセスに該当するシグナルハンドラが登録されていない場合には、デフォルトのシグナルハンドラが実行されます。ハンドラ名は「SIG_DFL」です。

シグナルハンドラの登録には、signal()sigacton()というシステムコール(カーネルの処理を呼び出すC言語の関数)が利用できます。それぞれ次のように使います。

  • signal()は引数にシグナルとハンドラを指定して実行します(後述のプログラム例2を参照)
  • sigacton()は引数にシグナルと、シグナルハンドラを要素に含むsigaction構造体を指定して実行します(後述のhttpdとnamedの例を参照)
  • signal()の動作はシステムによって異なるため、移植性が必要な場合はsigacton()を使うことが推奨されています。

プログラムの中で独自にシグナルハンドラを登録することにより、上記の表とは異なる機能を持たせることもできます。ただし、SIGKILLは強制的に終了させるための、SIGSTOPは強制的に一時停止させるための特別なシグナルであり、プロセスはこれら2つのシグナルだけは捕捉できないため、プロセス自身の中で処理をすることができません。

プロセスが送信したシグナルは、カーネルを経由して送信先のプロセスに配信されます。ただし、SIGKILLSIGSTOPは送信先プロセスに配信されることなく、カーネルによって強制的な終了あるいは一時停止の処理が行われます。

次のページ
デフォルトハンドラだけのプロセスにシグナルを送信する

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
  • hatena
ドラゴン大竹のLPICレベル1 弱点克服クラス(Ver 4対応)連載記事一覧

もっと読む

この記事の著者

大竹 龍史(有限会社ナレッジデザイン)(オオタケ リュウシ)

有限会社ナレッジデザイン 代表取締役。1986年 伊藤忠データシステム(現・伊藤忠テクノソリューションズ(株))入社後、Sun Microsystems社のSunUNIX 3.x、SunOS 4.x、Solaris 2.xを皮切りにOSを中心としたサポートと社内トレーニングを担当。1998年 (有)ナレッジデザイン設立。Linux、Solarisの講師および、LPI対応コースの開発/実施。約27年にわたり、OS の中核部分のコンポーネントを中心に、UNIX/Solaris、Linuxなどオペレーティングシステ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事をシェア

  • Facebook
  • X
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/51 2016/10/04 12:17

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

2024年12月6日(金)13:00~15:30

イベントカレンダーを見る

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング