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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 信號,第 3 部分:提高信號 > 原文:<https://github.com/angrave/SystemProgramming/wiki/Signals%2C-Part-3%3A-Raising-signals> ## 如何從 shell 向進程發送信號? 您已經知道發送`SIG_INT`的一種方法只需鍵入`CTRL-C`從 shell 中可以使用`kill`(如果您知道進程 ID)和`killall`(如果您知道進程名稱) ``` # First let's use ps and grep to find the process we want to send a signal to $ ps au | grep myprogram angrave 4409 0.0 0.0 2434892 512 s004 R+ 2:42PM 0:00.00 myprogram 1 2 3 #Send SIGINT signal to process 4409 (equivalent of `CTRL-C`) $ kill -SIGINT 4409 #Send SIGKILL (terminate the process) $ kill -SIGKILL 4409 $ kill -9 4409 ``` `killall`類似,只是它與程序名稱匹配。接下來的兩個例子,發送`SIGINT`然后發送`SIGKILL`來終止正在運行的進程`myprogram` ``` # Send SIGINT (SIGINT can be ignored) $ killall -SIGINT myprogram # SIGKILL (-9) cannot be ignored! $ killall -9 myprogram ``` ## 如何從正在運行的 C 程序向進程發送信號? 使用`raise`或`kill` ```c int raise(int sig); // Send a signal to myself! int kill(pid_t pid, int sig); // Send a signal to another process ``` 對于非 root 進程,信號只能發送給同一用戶的進程,即你不能只是 SIGKILL 我的進程!有關詳細信息,請參閱 kill(2),即 man -s2。 ## 如何向特定線程發送信號? 使用`pthread_kill` ```c int pthread_kill(pthread_t thread, int sig) ``` 在下面的示例中,執行`func`的新創建的線程將被`SIGINT`中斷 ```c pthread_create(&tid, NULL, func, args); pthread_kill(tid, SIGINT); pthread_kill(pthread_self(), SIGKILL); // send SIGKILL to myself ``` ## 將`pthread_kill( threadid, SIGKILL)`殺死進程或線程嗎? 它會殺死整個過程。雖然各個線程可以設置信號掩碼,但信號配置(每個信號執行的處理程序/動作表)是 _ 每個進程 _ 而不是 _ 每個線程 _。這意味著可以從任何線程調用`sigaction`,因為您將為進程中的所有線程設置信號處理程序。 ## 我如何捕獲(處理)信號? 您可以異步或同步選擇句柄待處理信號。 安裝信號處理程序以異步處理信號使用`sigaction`(或者,對于簡單的例子,`signal`)。 要同步捕獲待處理信號,請使用`sigwait`(阻塞直到發送信號)或`signalfd`(它還會阻塞并提供可以`read()`檢索待處理信號的文件描述符)。 有關使用`sigwait`的示例,請參閱`Signals, Part 4`
                  <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>

                              哎呀哎呀视频在线观看