<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## 概述 系統存在的信號 ``` > man 7 signal SIGHUP 1 A 在控制終端上是掛起信號, 或者控制進程結束 SIGINT 2 A 從鍵盤輸入的中斷 SIGQUIT 3 C 從鍵盤輸入的退出 SIGILL 4 C 無效硬件指令 SIGABRT 6 C 非正常終止, 可能來自 abort(3) SIGFPE 8 C 浮點運算例外 SIGKILL 9 AEF 殺死進程信號 SIGSEGV 11 C 無效的內存引用 SIGPIPE 13 A 管道中止: 寫入無人讀取的管道 SIGALRM 14 A 來自 alarm(2) 的超時信號 SIGTERM 15 A 終止信號 SIGUSR1 30,10,16 A 用戶定義的信號 1 SIGUSR2 31,12,17 A 用戶定義的信號 2 SIGCHLD 20,17,18 B 子進程結束或停止 SIGCONT 19,18,25 繼續停止的進程 SIGSTOP 17,19,23 DEF 停止進程 SIGTSTP 18,20,24 D 終端上發出的停止信號 SIGTTIN 21,21,26 D 后臺進程試圖從控制終端(tty)輸入 SIGTTOU 22,22,27 D 后臺進程試圖在控制終端(tty)輸出 ``` ## 常用的信號 linux 下的常見信號 ``` SIGPIPE 管道中止,當寫入無人讀取的管道時產生該信號,默認終止進程 SIGCHLD 子進程結束或停止時發送 SIGALRM 定時器信號,以秒為單位,默認終止進程 SIGUSR1/SIGUSR2 自定義,在進程間傳遞信號,默認終止進程 SIGINT 鍵盤輸入的退出信號 ,按鍵 Ctrl +\ 觸發 SIGQUIT 鍵盤輸入的退出信號,按鍵 Ctrl +c 觸發 SIGHUP 控制終端的掛起信號 ``` ### SIGPIPE 網絡程序必須要處理SIGPIPE信號,否則當客戶端退出后,服務器仍然向該SOCKET發數據時,則會引起Crash ### SIGCHLD 僵尸進程是一個早已死亡的進程,但在進程表中仍占有位置 Linux中當子進程結束的時候,他并沒有被完全銷毀,因為父進程還要用它的信息 父進程沒有處理SIGCHLD信號或調用wait/waitpid()等待子進程結束,就會出現僵尸進程 ## 實例 ### 簡單實例 使用 signal ``` #include <iostream> #include <csignal> void sighandle(int sig) { std::cout << "receved signal " << sig << std::endl; } int main(int argc, char* argv[]) { signal(SIGINT, sighandle); signal(SIGQUIT, sighandle); pause(); return 0; } ``` 編譯 ``` clang++ -std=c++11 -o test 1.cpp ``` 執行 ``` ./test // 按 Ctrl+C ^Creceved signal 2 ``` ### 使用 sigaction ``` #include <iostream> #include <csignal> void sighandle(int sig) { std::cout << "receved signal " << sig << std::endl; } int main(int argc, char* argv[]) { struct sigaction act, oact; act.sa_handler = sighandle; sigfillset(&act.sa_mask); act.sa_flags = 0; sigaction(SIGINT, &act, &oact); pause(); return 0; } ``` 編譯 ``` clang++ -std=c++11 -o test 1.cpp ``` 執行 ``` ./test // 按 Ctrl+C ^Creceved signal 2 ```
                  <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>

                              哎呀哎呀视频在线观看