perlでsignalを使用する例
2022-01-03 09:50:37
シグナルを使って、プログラムをより機能的にしましょう。Linuxで全てのsignalをリストアップするには、kill -lを使用するだけです。以下は私のマシンでの出力です(後でリストアップされない64個があります)。
コピーコード
コードは以下の通りです。
xuyang@xuyang-desktop:/$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8 ) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS
それぞれの信号について説明します。
以下は、ctrl+cを無効にして(ctrl+cは現在のプログラムにINT信号を発生させる)、現在のプログラムを終了させる例です。
コピーコード
コードは以下の通りです。
sub INT_handler {
print("Don't Interrupt!\n");
}
$SIG{'INT'} = 'INT_handler'; #another way is $SIG{'INT'} = \&INT_handler ;
for ($x = 0; $x < 10; $x++) {
print("$x\n");
sleep 1;
ここで、%SIGはPerlの組み込みハッシュで、特にシグナルを処理するためのものです。もしシグナルを無視したい場合は、次のように書きます。
コピーコード
コードは以下の通りです。
$SIG{'INT'} = 'IGNORE' ;
デフォルトのケースに戻すには
コピーコード
コードは以下の通りです。
$SIG{'INT'} = 'DEFAULT' ;
プログラムに送信するには、ctrl+cを使用する以外に、次のように入力することもできます。
コピーコード
コードは以下の通りです。
kill -s INT .
もっと便利なのはSIGUSR1とSIGUSR2で、これはカスタム・シグナルです。この2つのシグナルは、プログラムの中で自由に扱うことができます。そして、このシグナルをトリガーしたいときは、次のようにタイプするだけです。
コピーコード
コードは以下の通りです。
kill -s USR1 pid
そして、このシグナルハンドラをトリガーにして、デバッグメッセージのオン・オフや作業モードの切り替えなどを行うことができるのです。もちろん、シグナルはOSの機能なので、perlだけでなく、他の言語でも使えます。構文が違うだけです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Perlの文字列比較と整数比較の違いについて
-
Perlの1行コメントと複数行コメントの構文
-
Perlの強力な正規表現の例を解説
-
Perl の Getopt::Long モジュールを使用して、ユーザーのコマンドライン引数を受け取ります。
-
長さを指定し、ランダムなDNA配列を生成するperlスクリプトコード
-
perlの$aおよび$bの紹介
-
Perl AnyEvent ウォッチャーの例
-
Javaプログラマのための10分でわかるPerlチュートリアル
-
[解決済み] Perlでディレクトリを丸ごとコピーするにはどうしたらいいですか?
-
問題発生 ----DBI ODBCエラー Perlスクリプトを実行中、エラー:[unixODBC][Driver Manager] データソース名が見つからない、およびデフォルトがない