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

独自のシグナルハンドラが登録されたプロセスにシグナルを送信する

今度は、独自のシグナルハンドラが登録されたプロセスにシグナルを送信した場合を見てみましょう。シグナルを受信させるプロセスのプログラムコードは、次のとおりです。SIGHUPSIGINTSIGTERMという3つのシグナルのハンドラが登録されています。動作イメージも図にして掲載しておきます。

独自のシグナルハンドラが登録されたプロセスにシグナルを送信した場合の動作
独自のシグナルハンドラが登録されたプロセスにシグナルを送信した場合の動作
プログラム例2「myApp-2.c」:SIGHUP、SIGINT、SIGTERMシグナルのハンドラを登録
(▼viエディタでC言語プログラムmyApp-2.cを作成)
$ vi myApp-2.c

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void my_default();
void my_term();

int main(void)
{
  signal(SIGHUP, my_default);  //SIGHUP受信時のハンドラmy_defaultを登録
  signal(SIGINT, my_default);  //SIGINT受信時のハンドラmy_defaultを登録
  signal(SIGTERM, my_term);    //SIGTERM受信時のハンドラmy_termを登録
  while(1) {};  //無限ループ
}

void my_default(int sig)  //SIGHUPあるいはSIGINT受信時に呼び出される
{
  //シグナル番号とともにシグナルを受信した旨のメッセージを表示
  printf("signal %d received.\n", sig); 
  return;
}

void my_term(int sig)  //SIGTERM受信時に呼び出される
{
  //シグナル番号とともにシグナルを受信した旨のメッセージを表示
  printf("signal %d received. Terminating...\n", sig);
  exit(0);  //プログラムを終了する
}

(▼myApp-2.cをコンパイルして実行プログラム myApp-2 を作成)
$ make myApp-2

(▼myApp-2を実行)
$ ./myApp-2

実行例7:myApp-2にSIGHUP、SIGINT、SIGTERMシグナルを順に送信

受信側 送信側
$ ./myApp-2
signal 1 received.
signal 2 received.
signal 15 received. Terminating...
$ killall -s HUP myApp-2
$ killall -s INT myApp-2
$ killall myApp-2

プロセスにどのようなシグナルハンドラが登録されているかは、/proc/プロセスID/statusファイルの内容を調べることで確認できます。/proc/プロセスID/statusファイルの中の「SigCgt」(Signal Caughtの短縮)エントリは、シグナルハンドラの登録により捕捉されるシグナルの16進数でのビットマップです。左端がMSB(Most Significant Bit)、 右端がLSB(Least Significant Bit)となっています。

myApp-1のように独自のシグナルハンドラの登録されていない、デフォルトハンドラのみの場合、SigCgtの値はオール0になります。

$ grep SigCgt /proc/`pidof myApp-1`/status
SigCgt: 0000000000000000

一方、myApp-2のようにSIGHUPSIGINTSIGTERMのシグナルハンドラが登録されたプロセスの場合、SigCgtの値は次のようになります。

$ grep SigCgt /proc/`pidof myApp-2`/status
SigCgt: 0000000000004003

(▼bcコマンドで16進数を2進数に変換)
$ echo "obase=2; ibase=16; 4003" |bc
100000000000011

2進数に変換した値10000 00000 00011から、左から15、2、1の各ビットが立っていることが分かります。

次のページ
SIGTERMの受信設定と動作例 - Apache httpd デーモンの場合 -

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

  • 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

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング