日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux 后台运行程序

發(fā)布時(shí)間:2023/12/31 linux 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 后台运行程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、寫在前面

由于工作中未使用過(guò) Linux 操作系統(tǒng),學(xué)習(xí)過(guò)的 Linux 相關(guān)的知識(shí)早已變得支離破碎。現(xiàn)在需要將智能機(jī)器人項(xiàng)目后臺(tái)運(yùn)行在 CentOS 上,不得不再走一遍 Linux 這條道。
對(duì)于 Linux 操作系統(tǒng)運(yùn)行的應(yīng)用程序,默認(rèn)情況下都是前臺(tái)運(yùn)行( Forceground ),這會(huì)獨(dú)占命令窗口,當(dāng)退出命令窗口或者 Shell 會(huì)話時(shí),運(yùn)行的程序都會(huì)隨之被中斷退出,就像默默執(zhí)行了一次 Ctrl + C 指令一樣,這個(gè)機(jī)制不適合運(yùn)行項(xiàng)目。
對(duì)此,我四處搜尋,找到一種最適合的解決方案,旨在解決能在 Linux 操作系統(tǒng)上后臺(tái)運(yùn)行程序,同時(shí)能方便管理:前后臺(tái)切換、查看、掛起和繼續(xù)。

2、可行的解決方案

2.1、方案一:使用 & 符號(hào)

2.1.1、使用示例

& 符號(hào)的用法很簡(jiǎn)單,就是在執(zhí)行的命令末尾加上 &符號(hào),該命令開(kāi)啟的進(jìn)程即可在后臺(tái)運(yùn)行(background job),即成為“守護(hù)進(jìn)程(daemon)”。

$ java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar &

用這種方式執(zhí)行命令,命令會(huì)被放到后臺(tái)運(yùn)行,當(dāng)前命令窗口不會(huì)被占用,可繼續(xù)執(zhí)行其他命令。& 符號(hào)通常用在比較耗時(shí)的命令上,如拷貝大文件。

2.1.2、前后臺(tái)任務(wù)管理

  • 查看任務(wù)
  • 通過(guò)命令 jobs 顯示當(dāng)前終端正在運(yùn)行的進(jìn)程,包括前臺(tái)運(yùn)行和后臺(tái)運(yùn)行的進(jìn)程。它對(duì)每個(gè)正在執(zhí)行中的進(jìn)程任務(wù)分配了一個(gè)序號(hào)(這個(gè)序號(hào)不是進(jìn)程 ID),可以使用這些序號(hào)來(lái)引用各個(gè)進(jìn)程任務(wù)。

    $ jobs [1]+ Running java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar &
  • 將前臺(tái)任務(wù)放到后臺(tái)
  • # 第一步:使用組合鍵 Ctrl + Z 將當(dāng)前任務(wù)暫停 [1]+ Stopped java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar# 第二步:執(zhí)行 bg 命令,當(dāng)前任務(wù)會(huì)切換到后臺(tái),并從暫定位置繼續(xù)執(zhí)行 $ bg 1 [1]+ java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar &
  • 將后臺(tái)任務(wù)放到前臺(tái)
  • 后臺(tái)任務(wù)可能有多個(gè),每個(gè)任務(wù)有不同的標(biāo)識(shí),可以通過(guò)任務(wù)序號(hào)來(lái)指定。

    # 執(zhí)行 bg 命令,傳遞對(duì)應(yīng)的 Job 的序號(hào): $ fg 1

    **注意:**放到前臺(tái)運(yùn)行的任務(wù),使用組合鍵 Ctrl + C 可以中斷。

    2.1.3、特點(diǎn)總結(jié)

  • 此方式開(kāi)啟的后臺(tái)任務(wù),不會(huì)被指令 Ctrl + C 指令中斷,切結(jié)果會(huì)輸出到終端;
  • 如果終端斷網(wǎng)或者關(guān)閉了終端,后臺(tái)任務(wù)會(huì)被中斷,進(jìn)程退出;
  • 此方案更適合配合耗時(shí)命令使用,不適合運(yùn)行后臺(tái)項(xiàng)目;
  • 雖然能做到了“后臺(tái)運(yùn)行”,但是沒(méi)有做到真正的后臺(tái),即關(guān)閉中斷也能繼續(xù)運(yùn)行;
  • 2.2、方案二:nohup 命令

    2.2.1、使用示例

    nohup 英文全稱 no hang up(不掛起),用于在系統(tǒng)后臺(tái)不掛斷地運(yùn)行命令,退出終端不會(huì)影響程序的運(yùn)行。nohup 命令,在默認(rèn)情況下(非重定向時(shí)),會(huì)輸出一個(gè)名叫 nohup.out 的文件到當(dāng)前目錄下,如果當(dāng)前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。(文末有傳送帶)
    在使用上,nohup 命令很簡(jiǎn)單,只需要放在需要執(zhí)行的命令之前即可:

    # 執(zhí)行命令 $ nohup java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar# 運(yùn)行成功的標(biāo)志 nohup: ignoring input and appending output to 'nohup.out'

    2.2.2、特點(diǎn)總結(jié)

  • 此方案解決了即使終端關(guān)閉,進(jìn)程也能繼續(xù)運(yùn)行的問(wèn)題;
  • 但不能免疫使用組合鍵 Ctrl + C 關(guān)閉程序;
  • 2.3、終極方案:nohup + &

    在真正的項(xiàng)目中,應(yīng)該使用命令 nohup 結(jié)合符號(hào) & 使用,可以同時(shí)免疫組合鍵 Ctrl + C 和 終端關(guān)閉(即 Session 結(jié)束),能做到讓任務(wù)永久在 后臺(tái)運(yùn)行。

    2.3.1、使用示例

    # 執(zhí)行命令 $ nohup java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar &

    2.3.2、常用的任務(wù)管理命令

  • jobs :查看任務(wù),返回任務(wù)編號(hào)n和進(jìn)程號(hào)
  • bg %n :將編號(hào)為n的任務(wù)轉(zhuǎn)后臺(tái)運(yùn)行
  • fg %n :將編號(hào)為n的任務(wù)轉(zhuǎn)前臺(tái)運(yùn)行
  • ctrl+z :掛起當(dāng)前任務(wù)
  • ctrl+c :結(jié)束當(dāng)前任務(wù)
  • 3、參考資料

  • Linux 中的 &
  • [阮一峰]Linux 守護(hù)進(jìn)程的啟動(dòng)方法 - 走看看
  • Linux nohup 命令 | 菜鳥(niǎo)教程
  • 一分鐘了解nohup和&的功效
  • nohup &的用法、進(jìn)程查看以及終止 - 聲聲慢43 - 博客園
  • 總結(jié)

    以上是生活随笔為你收集整理的Linux 后台运行程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。