[解決済み] なぜ Unix プログラムは、(USR1 などではなく) 意味のあるプログラム定義名を持つシグナルを持つことができないのでしょうか?
質問
多くの Unix プログラムは、以下のようなシグナルを受け付けます。
USR1
と
USR2
. 例えば、Nginx の実行ファイルをその場でアップグレードする場合
kill -USR2
.
私は、以下のことを理解しています。
USR1
は "user defined" シグナルで、プログラムを作った人が誰でも "shut down" や "dump your logs" や "print foo a thousand times" などという意味で使うことができることを意味しています。しかし、なぜこのような任意の名前を使わなければならないのか、私には理解できません。なぜ
kill -UPGRADE
あるいは
kill -GRACEFUL_SHUTDOWN
? Unixは特定の信号しか許さないのでしょうか?
ついでに言うと、Nginxは以下のようなシグナルも使っています( ドキュメント ):
- TERM、INT : クイックシャットダウン
- QUIT : グレースフルシャットダウン
-
HUP
:
- コンフィギュレーション再読み込み
- 新しいワーカープロセスを新しいコンフィギュレーションで起動する
- 古いワーカープロセスをグレースフルにシャットダウン
- USR1 : ログファイルを開き直す
- USR2 : 実行ファイルをオンザフライでアップグレード
- ウィンチ : ワーカープロセスを緩やかにシャットダウンする
HUP? WINCH?これらの名前の理由は何ですか?どこで詳しく知ることができるのでしょうか?
どのように解決するのですか?
OS 上で利用可能なシグナルは OS によって定義されます (通常は POSIX に従います) - それらは "文字列" ではなく、標準的な名前を持つ整数定数です。
USR1
と
USR2
は、特定の意味を持たない2つのシグナルで、開発者が望む任意の用途に使われることを意図しています。
あなたのLinuxマシン上で
man 7 signal
を読んでください。
イベントに応じてシグナルを発行するOSに対応する準備ができていれば、他のシグナルの意味を再定義することができます。例えば
HUP
は、プロセスが決してハングアップ (端末の損失) しないことが確実であるか、ユーザーではなく OS が HUP 信号を送信するケースを処理する用意がある限り、"reload configuration" を意味するようにすることができます。
関連
-
[解決済み] UNIXにおけるwall-clock-time, user-cpu-time, system-cpu-timeとは具体的にどのようなものですか?
-
[解決済み] sed または awk: パターンに従って n 行を削除する
-
[解決済み] ssh user@host コマンド`が動作するように $PATH を設定するには?
-
[解決済み] SIGINTと他の終了信号(SIGTERM、SIGQUIT、SIGKILL)との関連はどうなっていますか?
-
[解決済み] 異なる行のファイル名のリストを取得する方法
-
[解決済み] UNIXでファイルの追加はアトミックですか?
-
[解決済み] リテラル文字列のGrep
-
[解決済み] CSVファイルをsortコマンドで列の優先順位で並べ替える
-
[解決済み] グレースフル・シャットダウンプロセスのシグナルはどのような順番で送ればよいのですか?
-
[解決済み] Go言語でUnixのタイムスタンプを取得する(エポックからの秒数で現在の時刻を表す)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] time(1) の出力における 'real', 'user' および 'sys' はどのような意味ですか?
-
[解決済み] Unixでテキストファイルからあらかじめ決められた範囲の行を抽出するには?
-
[解決済み] 標準入力にタイムスタンプを前置するUnixユーティリティはありますか?
-
[解決済み] コマンドライン:検索結果をrmにパイプする
-
[解決済み] シェルスクリプト - <date>以降に変更されたすべてのファイルを取得します。
-
[解決済み] ssh user@host コマンド`が動作するように $PATH を設定するには?
-
[解決済み] 排他ロックと共有ロックの違いは何ですか?
-
[解決済み] シェルスクリプト内の文字列を変数で置換する
-
[解決済み] Go言語でUnixのタイムスタンプを取得する(エポックからの秒数で現在の時刻を表す)
-
[解決済み] SSHトンネルのセットアップを許可するが、それ以外のことは許可しない