14

このコメントは私を混乱させます:「kill-lは一般的にすべてのシグナルをリストします」。信号は量子化された量のエネルギーを意味すると思いました。

【追加】 Unixの(計算)信号と物理信号を明確にしてください。それらは完全に異なる概念ですか?

[追加]パラダイム間に大きな違いはありますか?C、Python、Haskellなどの言語でも意味は同じですか?信号は一般的な用語のようです。

4

11 に答える 11

15

マニュアルは、プロセスまたはオペレーティングシステムが信号を送信することによって他のプロセスに通知できるようにする非常に基本的なメカニズムを指します。SIGABRTオペレーティングシステムはこれを使用して、プログラムの中止(シグナル)またはセグメンテーション違反(多くの場合、nullポインタへのアクセスによって引き起こされる)についてプログラムに通知し、SIGSEGVそのうちの2つに名前を付けることができます。

一部のUNIXサーバーはシグナルを使用するため、管理者はkillシグナルを送信して、再起動せずに構成ファイルを再読み取りできます。

一部のシグナルに対して実行されるデフォルトのアクションがあり、他のシグナルは無視されます。たとえば、を受信するSIGSEGVと、プログラムは終了しますが、を受信するSIGCHLDと、子プロセスが停止したことを意味し、デフォルトでは特別な結果は得られません。

シグナルハンドラーをインストールするANSIC標準関数があります。これは、シグナルを受信したときにコードを実行できる関数であり、signal(read in man signal)と呼ばれます。異なるUNIXでは、その関数の動作が異なるため、その使用はお勧めしません。そのマンページは、一貫性のある動作をし、さらに強力なsigaction関数(read )を参照しています。man sigaction

于 2009-01-18T20:44:42.087 に答える
14

人々がハードウェアとソフトウェアなどを比較したり、ある時点でOSに重点を置いたりしていないとは信じられません。

信号と割り込みの比較:

違いは、割り込みがハードウェアによってオペレーティング システムに送信されるのに対し、信号はオペレーティング システムまたは他のプロセスによってプロセスに送信されることです。シグナルは、ハードウェア(この場合は CPU 自体) から送信されるソフトウェア割り込みとは関係がないことに注意してください。(ソース)

定義

  1. プロセス = 以下の本によると、実行中のプログラム

参考文献

  1. 信号を割り込みおよび例外と比較します

  2. Tanenbaum の著書「Modern Operating Systems」

于 2009-08-28T16:56:09.633 に答える
10

物理的なシグナルと Unix のシグナルはまったく異なる概念です。Unix シグナルがあるプロセスから別のプロセスに送信される場合、対応する特定の物理シグナルはありません。Unix シグナルは単なる抽象化であるため、プログラマーは相互に通信するプロセスについて話すことができます。

Unix シグナルは、メッセージ、イベント、通知、または「フロブ」などの造語と呼ばれることさえありました。デザイナーは「シグナル」という名前を選んだだけで、それは定着しました。

于 2009-01-18T21:58:29.817 に答える
5

シグナルは、ターゲットプロセスまたはOSへのターゲットプロセスに関するメッセージです。これはunixAPIの一部です(さまざまなPOSIX標準で定義されています)。

man kill、、、man signalをお読みくださいman sigaction

役立つかもしれない他のSOの質問:

于 2009-01-18T20:43:00.017 に答える
4

私のメモからのいくつか:

非同期通信が可能

  • 同一ユーザーのプロセス間
  • システムからあらゆるプロセスへ
  • システム管理者からあらゆるプロセスへ
  • 関連するすべての情報は信号自体にあります
  • 多くの異なる信号

シギント

  • システムから端末に関連付けられたすべてのプロセスへ
  • トリガー: ^C が押された
  • 実行中のプロセスを停止する通常の方法

シグペ

  • カーネルから単一プロセスへ
  • トリガー: 浮動小数点演算のエラー

シグキル

  • 単一プロセスへ
  • 宛先プロセスの実行を停止します

SIGALRM

  • カーネルから単一プロセスへ
  • トリガー: タイマーの満了

SIGTERM

  • 単一プロセスへ
  • プロセスが正常に終了することを推奨します

SIGUSR1、SIGUSR2

  • あらゆるプロセスからあらゆるプロセスへ
  • 定義済みのセマンティックなし
  • プログラマーが自由に使える

別のプロセスにシグナルを送る

  • int kill(pid, signal_ID)

プログラマーは、信号を受信したときに何をするかを決定できます

  • デフォルトの動作を使用する
  • それを無視します
  • ユーザー関数を実行する

中断された書き込みの検出

if (write(fd, buff, SIZE)<0) {
  switch (errno) {
   case EINTR:
    warning(“Interrupted write\n”);
    break;
  }
}…
于 2009-01-18T20:57:57.770 に答える
3

シグナルは、実行中のプロセスに送信できるメッセージです。

たとえば、インターネットデーモン(inetd)に構成ファイルを再読み取りするように指示するには、SIGHUP信号を送信する必要があります。

たとえば、inetdの現在のプロセスID(PID)が1234の場合、次のように入力します。kill -SIGHUP 1234

于 2009-01-18T20:44:18.530 に答える
2

シグナルは、「計算プロセス間で送信されるイベント、メッセージ、またはデータ構造」です(ウィキペディアから)。

于 2009-01-18T20:41:23.560 に答える
1

この場合、信号は「メッセージ」を意味します。つまり、プロセスにさまざまなことを実行するように指示できるメッセージをプロセスに送信します。

于 2009-01-18T20:42:39.643 に答える
0

UNIX シグナルは、UNIX プロセスとの間で送受信できる一種のメッセージです。プロセスに終了するように指示する (SIGKILL)、プロセスに無効なメモリ参照がある (SIGSEGV)、またはユーザーが control-c を押すことによってプロセスが強制終了された (SIGINT) などのことを行うことができます。

*nix コマンド ラインから次のように入力します。

男信号

これにより、利用可能なすべての信号が表示されます。

于 2009-01-18T20:59:46.863 に答える