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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 測試代碼如下 ```php <?php $a = 1; while(true){ echo "Tinywan ".$a++.'\r\n'; sleep(1); } ``` > 是一個輸出`Tinywan`字符串與循環輪數的死循環程序,每輸出一行就休眠1秒。 ### 原始輸出 前臺執行該程序運行效果 ```shell www@manager1:~/build$ php tinywan.php Tinywan : 1 Tinywan : 2 Tinywan : 3 Tinywan : 4 Tinywan : 5 Tinywan : 6 Tinywan : 7 Tinywan : 8 Tinywan : 9 ^C ``` 程序每隔一秒會在終端輸出一個字符串 。 此時如果鍵入`Ctrl+C`?,程序會收到一個`SIGINT`信號,如果不做特殊處理,程序的默認行為是終止(如上圖)。 > **信號量`SIGINT `** > > 程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發出,用于通知前臺進程組終止進程。 ### 使用 `&` 下來使用 `php tinywan.phpt & `后臺運行程序,會是什么效果呢? ```php www@manager1:~/build$ php tinywan.php & [1] 17153 www@manager1:~/build$ Tinywan : 1 Tinywan : 2 Tinywan : 3 ^C www@manager1:~/build$ Tinywan : 8 Tinywan : 9 Tinywan : 10 ^C www@manager1:~/build$ Tinywan : 11 Tinywan : 12 ^C www@manager1:~/build$ Tinywan : 16 ``` 如上運行結果: * 首先會在終端顯示進程號是`17153` * 鍵入**Ctrl + C**,發出SIGINT信號,程序會繼續運行 。 ps確認一下,確認進程依然在運行,進程號是`17153`。 ```shell www@manager1:~$ ps -axu|grep php www 17153 0.0 1.2 210596 25788 pts/2 S 09:02 0:00 php tinywan.php www 17386 0.0 0.0 14428 996 pts/3 S+ 09:07 0:00 grep --color=auto php ``` 此時如果關掉session(關閉當前的終端回話窗口),程序會收到一個SIGHUP信號,此時會怎么樣呢? ```shell www@manager1:~$ ps -axu|grep php www 17386 0.0 0.0 14428 996 pts/3 S+ 09:07 0:00 grep --color=auto php ``` ps再次確認,可以看到關閉session之后,進程號是`17153`的進程也關閉了。 > 如果不關閉終端的情況,想結束該進程,可以使用kill命令:`kill -9 17153` ### 使用 nohup ```shell www@manager1:~/build$ nohup php tinywan.php nohup: ignoring input and appending output to 'nohup.out' ``` 使用nohup 運行程序`tinywan.php`,會發現: * 前臺沒有出現進程號 * 有一個`“忽略輸入,輸出至nohup.out”`的提示 * Tinywan的輸出也沒有出現在前臺 ```shell www@manager1:~$ ps -aux |grep php www 17557 0.0 1.2 210596 25636 pts/3 S+ 09:12 0:00 php tinywan.php www 17689 0.0 0.0 14428 1036 pts/2 S+ 09:15 0:00 grep --color=auto php ``` > 忽略輸入并將輸出附加到'nohup.out',查看這個文件內容 手動ps看進程號,這次 tinywan.php 的進程號是 `17557`。 此時如果關掉session,程序會收到一個`SIGHUP`信號,程序會不會關閉呢? > **信號量 `SIGHUP `** > > 本信號在用戶終端連接(正常或非正常)結束時發出, 通常是在終端的控制進程結束時, 通知同一session內的各個作業,這時它們與控制終端不再關聯。 > > 登錄Linux時,系統會分配給登錄用戶一個終端(Session)。在這個終端運行的所有程序,包括前臺進程組和后臺進程組,一般都屬于這個 Session。當用戶退出Linux登錄時,前臺進程組和后臺有對終端輸出的進程將會收到SIGHUP信號。這個信號的默認操作為終止進程,因此前臺進 程組和后臺有終端輸出的進程就會中止。不過可以捕獲這個信號,比如wget能捕獲SIGHUP信號,并忽略它,這樣就算退出了Linux登錄,wget也能繼續下載。 > > 此外,對于與終端脫離關系的守護進程,這個信號用于通知它重新讀取配置文件。 ```shell www@manager1:~$ ps -aux |grep php www 17557 0.0 1.2 210596 25636 ? S 09:12 0:00 php tinywan.php www 17725 0.0 0.0 14428 1028 pts/2 S+ 09:16 0:00 grep --color=auto php www@manager1:~$ ps -aux |grep php www 17557 0.0 1.2 210596 25636 ? S 09:12 0:00 php tinywan.php www 17734 0.0 0.0 14428 1092 pts/2 S+ 09:16 0:00 grep --color=auto php ``` 關掉session后,再次ps看一下,ID為`17557`的 tinywan.php 進程還在。 > 這些只能通過kill把程序干掉了,killall之后,ps查看進程已經關閉。 ### nohup 和 & 同時使用 終端運行 ```shell www@manager1:~/build$ nohup php tinywan.php & [1] 17947 www@manager1:~/build$ nohup: ignoring input and appending output to 'nohup.out' ^C www@manager1:~/build$ ``` 使用`nohup php tinywan.php &`運行程序后,可以看到 * 會在終端顯示進程號是 17947 * 也會有一個“忽略輸入,輸出至nohup.out”的提示 * 鍵入Ctrl + C,發送SIGINT信號,似乎沒反應。 關閉session,發送SIGHUP信號,再來看看。 ```shell www@manager1:~/build$ ps -aux |grep php www 17947 0.0 1.2 210596 25644 pts/2 S 09:22 0:00 php tinywan.php www 18013 0.0 0.0 14428 1092 pts/2 S+ 09:24 0:00 grep --color=auto php ``` ID為`17947`的進程依然存在,后續也只能用kill來關閉它。 ### 結論 使用`&`后臺運行程序: - 結果會輸出到終端 - 使用Ctrl + C發送SIGINT信號,程序免疫 - 關閉session發送SIGHUP信號,程序關閉 使用`nohup`運行程序: - 結果默認會輸出到nohup.out - 使用Ctrl + C發送SIGINT信號,程序關閉 - 關閉session發送SIGHUP信號,程序免疫 > **平日線上經常使用`nohup`和`&`配合來啟動程序** - 同時免疫SIGINT和SIGHUP信號 - (最佳實踐)不要將信息輸出到終端標準輸出,標準錯誤輸出,而要用日志組件將信息記錄到日志里
                  <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>

                              哎呀哎呀视频在线观看