<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # 進程信號 ****** 信號(Singals)是 Unix 系統中使用的最古老的進程間通信的方法之一。操作系統通過信號來通知進程系統中發生了某種預先規定好的事件(一組事件中的一個)。它也是用戶進程之間通信和同步的一種原始機制。一個鍵盤中斷或者一個錯誤條件(比如進程視圖訪問它的虛擬內存中不存在的位置等)都有可能產生一個信號。Shell 也使用信號向它的子進程發送作業控制信號。 信號是在 Unix System V 中首先引入的,它實現了 15 種信號,但很不可靠。BSD4.2 解決了其中的許多問題,而在BSD4.3 中進一步加強和改善了信號機制。但兩者的接口不完全兼容。在 Posix 1003.1 標準中做了一些強行規定,它定義了一個標準的信號接口,但沒有規定接口的實現。目前幾乎所有的 Unix 變種都提供了和 Posix 標準兼容的信號實現機制。 <br /> ## 階段 在一個信號的生命周期中有兩個階段:生成和傳送。當一個事件發生時,需要通知一個進程,這時生成一個信號。當進程識別出信號的到來,就采取適當的動作來傳送和處理信號。在信號到來和進程對信號進行處理之間,信號在進程上掛起(pending)。 內核為進程生產信號,來響應不同的事件,這些事件就是信號源。主要的信號源如下: * 異常:進程運行過程中出現異常; * 其他進程:一個進程可以向另一個或一組進程發送信號; * 終端中斷:Ctrl+C、Ctrl+\等; * 作業控制:前臺、后臺進程的管理; * 分配額:CPU 超時或文件大小突破限制; * 通知:通知進程某事件發生,如 I/O就緒等; * 報警:計時器到期。 <br /> ## 常見信號 * SIGHUP:從終端上發出的結束信號; * SIGINT:來自鍵盤的中斷信號(Ctrl+C); * SIGOUT:來自鍵盤的退出信號(Ctrl+\); * SIGFPE:浮點異常信號(例如浮點運算溢出); * SIGKILL:該信號結束接收信號的過程; * SIGALRM:進程的定時器到期時,發送該信號; * SIGTERM:kill 命令發出的信號; * SIGCHLD:標識子進程停止或結束的信號; 每一個信號都有一個缺省動作,它是當進程沒有給這個信號執行處理程序時,內核對信號的處理。有5種缺省的動作: * 異常終止(abort):在進程的當前目錄下,把進程的地址空間內容、寄存器內容保存到一個叫做 core 的文件中,而后終止進程。 * 退出(exit):不產生 core 文件,直接終止進程。 * 忽略(ignore):忽略該信號。 * 停止(stop):掛起該進程。 * 繼續(continue):如果進程被掛起,則恢復進程的運行。否則,忽略信號。 進程可以對任何信號指定另一個動作或重載缺省動作,指定的新動作可以是忽略信號。進程也可以暫時地阻塞一個信號。因此進程可以選擇對某種信號所采取的特定操作,這些操作包括: * 忽略信號:進程可忽略產生的信號,但 SIGKILL 和 SIGSTOP 信號不能被忽略,必須處理(由進程自己或者內核處理)。進程可以忽略系統產生的大多數信號。 * 阻塞信號:進程可選擇阻塞某些信號,即先將到來的某些信號記錄下來,等到以后(解除阻塞后)再處理它。 * 由進程處理該信號:進程本省可在系統中注冊處理信號的處理程序地址,當發生該信號時,由注冊的處理程序處理信號。 * 由內核進行缺省處理:信號由內核的缺省程序處理,執行該信號的缺省動作。例如,進程接收到 SIGFPE(浮點異常)的缺省動作是產生 core 并退出。大多數情況下,信號由內核處理。 需要指出的是,對信號的任何處理,包括終止進程,都必須由接收到信號的進程來處理。而進程要執行信號處理程序,就必須等到它真正運行時。因此,對信號的處理可能需要延遲一段時間。 信號沒有固有的優先級。如果為一個進程同時產生了兩個信號,這兩個信號會以任意順序出現在進程中并會按任意順序被處理。另外,也沒有機制用于區分同一種類的多個信號。如果進程在處理某個信號之前,又有相同的信號發出,則進程只能接收到一個信號。進程無法知道它接收了1個還是42個SIGCONT 信號。 > 詳細內容可查看:[php進程通信-進程信號](http://blog.huanghui.xyz/2019/12/24/Swoole/Swoole%E5%9F%BA%E7%A1%80/php%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1-%E8%BF%9B%E7%A8%8B%E4%BF%A1%E5%8F%B7/)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看