0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux中幾種后臺(tái)任務(wù)的執(zhí)行方法

dyquk4xk2p3d ? 來(lái)源:良許Linux ? 2023-06-17 15:57 ? 次閱讀

今天給大家介紹Linux中幾種后臺(tái)任務(wù)的執(zhí)行方法。

1.問(wèn)題的引入

程序員最不能容忍的是在使用終端的時(shí)候往往因?yàn)?a target="_blank">網(wǎng)絡(luò),關(guān)閉屏幕,執(zhí)行CTRL+C等原因造成ssh斷開(kāi)造成正在運(yùn)行程序退出,使得我們的工作功虧一簣。

其背后的主要原因在于上述的相關(guān)操作,shell默認(rèn)會(huì)發(fā)送中斷信號(hào)給該終端session關(guān)聯(lián)的進(jìn)程,從而導(dǎo)致進(jìn)程跟隨終端退出,為了弄清這個(gè)問(wèn)題我們首先要了解兩種中斷信號(hào):

1)sigint:signal interrupt,ctrl+c會(huì)發(fā)送此信號(hào),主動(dòng)關(guān)閉程序

2)sighup: signal hang up,關(guān)閉終端,網(wǎng)絡(luò)斷線,關(guān)閉屏幕會(huì)發(fā)送此掛斷信號(hào)。

今天就給大家介紹linux中幾種后臺(tái)任務(wù)的執(zhí)行方法避免上述問(wèn)題。

2 & 符號(hào)

這是一種把 &放在執(zhí)行命令最后,使啟動(dòng)的程序忽略sigint信號(hào),此時(shí)執(zhí)行ctrl+c關(guān)閉就不會(huì)關(guān)閉此進(jìn)程,但是當(dāng)屏幕關(guān)閉,斷網(wǎng)仍然會(huì)造成進(jìn)程退出。

shtest.sh&

3.nohup指令

nohup(no hang up),意思就是不掛斷運(yùn)行,用nohup運(yùn)行命令可以使命令永久執(zhí)行下去,和用戶(hù)終端沒(méi)有關(guān)系,斷開(kāi)SSH不影響運(yùn)行,nohup捕獲了SIGHUP,并做了忽略處理,因此當(dāng)屏幕關(guān)閉,斷網(wǎng)等造成ssh中斷時(shí)進(jìn)程不會(huì)退出。但是ctrl+c可以關(guān)閉關(guān)閉該進(jìn)程。因此大多數(shù)情況同時(shí)使用nohup和&啟動(dòng)的程序,ctrl+c和關(guān)閉終端都無(wú)法關(guān)閉。在缺省情況下所有輸出都被重定向到一個(gè)名為nohup.out的文件中。

nohup指令基本使用格式:

nohupCommand[Arg...][&]

舉例

后臺(tái)不中斷執(zhí)行./test.sh,stdout輸出給out.log,stderr輸出給err.log

nohup./test.sh>out.log2>err.log&

相關(guān)的數(shù)字含義如下:

0 – stdin (standard input),

1 – stdout (standard output),顯然 nohup command > out.log 等價(jià)于 nohup command 1> out.log,是缺省行為。

2 – stderr (standard error)

可能你也會(huì)見(jiàn)到這種寫(xiě)法,其含義是把stderr也重定向給stdin

nohup./test.sh>out.log2>&1&

4.ctrl + z、jobs、fg、bg

如果我們程序在啟動(dòng)的時(shí)候并沒(méi)有使用&,nohup怎么辦呢,難道我們需要先執(zhí)行ctrl + c將在前臺(tái)執(zhí)行的進(jìn)程終止執(zhí)行再重新啟動(dòng)嗎,顯然有好的方法!

4.1 ctrl + z

將一個(gè)正在前臺(tái)執(zhí)行的作業(yè)進(jìn)程放到后臺(tái),并且暫停,用術(shù)語(yǔ)講就是掛起,執(zhí)行后如下:

[1]+Stopped./test.sh

4.2 jobs

查看當(dāng)前有多少在后臺(tái)運(yùn)行的命令,[jobnumber] 就是作業(yè)號(hào)。

jobs
[1]+Stopped./test.sh
[2]+Running./test2.sh&

4.3 bg

將后臺(tái)中暫停(掛起)的作業(yè)進(jìn)程繼續(xù)運(yùn)行,例如把1號(hào)作業(yè)(./test.sh) 放到后臺(tái)運(yùn)行,注意看已經(jīng)帶了&

bg1

[1]+./test.sh&

4.4 fg

將后臺(tái)中的作業(yè)進(jìn)程調(diào)至前臺(tái)繼續(xù)運(yùn)行,例如把2號(hào)作業(yè)(./test2.sh &)調(diào)至前臺(tái)運(yùn)行

fg2

./test2.sh

5.screen命令

5.1 介紹

如果說(shuō)上面的方法是通過(guò)linux 相關(guān)本身命令實(shí)現(xiàn)了前后臺(tái)任務(wù)調(diào)度,那么screen就提供了另外一種思路。

不說(shuō)人話的版本:GNU Screen是一款由GNU計(jì)劃開(kāi)發(fā)的用于命令行終端切換的自由軟件。用戶(hù)可以通過(guò)該軟件同時(shí)連接多個(gè)本地或遠(yuǎn)程的命令行會(huì)話,并在其間自由切換。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了統(tǒng)一的管理多個(gè)會(huì)話的界面和相應(yīng)的功能。

說(shuō)人話的版本: 我們可以粗略地認(rèn)為screen是一個(gè)虛擬終端軟件,直接在linux系統(tǒng)里面啟動(dòng)了另外一個(gè)后臺(tái)程序接管(維持)了你的終端會(huì)話,當(dāng)你直接連接的終端ssh斷開(kāi)時(shí)他仍然讓程序認(rèn)為你的ssh持續(xù)鏈接著,這樣也就不會(huì)出現(xiàn)進(jìn)程接收到中斷信號(hào)而退出。

5.2 安裝

yuminstallscreen

5.3 使用

1)新建會(huì)話

screen-Syourname->新建一個(gè)叫yourname的session

2) 列出當(dāng)前所有的session

screen-ls

3)恢復(fù)會(huì)話(回到y(tǒng)ourname這個(gè)session)

screen-ryourname

4) detach某個(gè)session

screen-dyourname->遠(yuǎn)程detach某個(gè)session
screen-d-ryourname->結(jié)束當(dāng)前session并回到y(tǒng)ourname這個(gè)session

5)刪除會(huì)話

screen-Spid-Xquit


責(zé)任編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11212

    瀏覽量

    208721
  • 終端
    +關(guān)注

    關(guān)注

    1

    文章

    1107

    瀏覽量

    29800
  • 程序
    +關(guān)注

    關(guān)注

    116

    文章

    3762

    瀏覽量

    80754

原文標(biāo)題:Linux下幾種運(yùn)行后臺(tái)任務(wù)的方法

文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙原生應(yīng)用/元服務(wù)開(kāi)發(fā)-延遲任務(wù)說(shuō)明(一)

    WorkSchedulerExtensionAbility限制以下接口的調(diào)用: @ohos.resourceschedule.backgroundTaskManager (后臺(tái)任務(wù)管理
    發(fā)表于 01-16 14:57

    labview后臺(tái)任務(wù)的例程

    哪位高手有l(wèi)abview后臺(tái)任務(wù)的例程????
    發(fā)表于 11-07 19:51

    linux的程序后臺(tái)執(zhí)行

    1. 執(zhí)行命令后加 & 符號(hào),缺點(diǎn)客戶(hù)端關(guān)了,也會(huì)停止執(zhí)行 后臺(tái)執(zhí)行:php cli.phpadmin/index& 顯示到前臺(tái)用命令:fg
    發(fā)表于 07-15 06:34

    幾種Linux后臺(tái)啟動(dòng)jar包的方法介紹

    ,但是窗口被鎖定,當(dāng)我們關(guān)閉窗口或Ctrl + C打斷程序運(yùn)行時(shí),程序就會(huì)退出,這肯定不是我們想要的,下面我介紹幾種Linux后臺(tái)啟動(dòng)jar包的方法
    發(fā)表于 07-22 08:02

    怎樣通過(guò)定時(shí)器去控制后臺(tái)任務(wù)

    通過(guò)定時(shí)器控制后臺(tái)任務(wù),每5ms執(zhí)行切換一個(gè)任務(wù),根據(jù)事件類(lèi)型可以區(qū)分不同類(lèi)型的任務(wù),對(duì)于外界按鍵類(lèi)的操作響應(yīng),只有當(dāng)前任務(wù)會(huì)做出響應(yīng),除當(dāng)
    發(fā)表于 01-07 07:27

    LabVIEW可執(zhí)行文件作為后臺(tái)進(jìn)程運(yùn)行

    其作為后臺(tái)任務(wù)運(yùn)行。如何隱藏可執(zhí)行的前面板窗口并刪除運(yùn)行應(yīng)用程序時(shí)顯示的任何任務(wù)欄圖標(biāo)?要在運(yùn)行可執(zhí)行文件時(shí)隱藏應(yīng)用程序的前面板窗口并刪除任何任務(wù)
    發(fā)表于 03-18 21:15

    HarmonyOS后臺(tái)任務(wù)管理開(kāi)發(fā)指南上線!

    為什么要使用后臺(tái)任務(wù)?開(kāi)發(fā)過(guò)程如何選擇合適的后臺(tái)任務(wù)?后臺(tái)任務(wù)申請(qǐng)時(shí)存在哪些約束與限制? 針對(duì)開(kāi)發(fā)者使用后臺(tái)任務(wù)
    發(fā)表于 11-29 09:58

    如何在Linux中使用 WSL 執(zhí)行任務(wù)

    在本教程,你將看到如何使用 WSL 執(zhí)行除了管理之外的任務(wù) —— 例如掛載 USB 驅(qū)動(dòng)器和操作文件。你需要運(yùn)行一個(gè)完全更新的 Windows 10 并選擇一個(gè) Linux 發(fā)行版。
    發(fā)表于 04-30 10:31 ?1995次閱讀

    介紹兩種方法來(lái)避免正在執(zhí)行任務(wù)中斷

    有時(shí)我們也許會(huì)有這樣的需求:要執(zhí)行一個(gè)命令或者腳本,但是需要幾個(gè)小時(shí)甚至幾天。這就要考慮一個(gè)問(wèn)題,就是中途斷網(wǎng)或出現(xiàn)其他意外情況,執(zhí)行任務(wù)中斷了怎么辦?你可以把命令或者腳本丟到后臺(tái)運(yùn)
    的頭像 發(fā)表于 02-09 08:56 ?6180次閱讀
    介紹兩種<b class='flag-5'>方法</b>來(lái)避免正在<b class='flag-5'>執(zhí)行</b><b class='flag-5'>中</b>的<b class='flag-5'>任務(wù)</b>中斷

    Linux 后臺(tái)運(yùn)行程序

    ?在 Linux 系統(tǒng)的終端工作時(shí),有時(shí)需要將當(dāng)前任務(wù)暫停調(diào)至后臺(tái),或有時(shí)須將后臺(tái)暫停的
    發(fā)表于 04-02 14:41 ?765次閱讀

    LabVIEW教程之后臺(tái)任務(wù)的詳細(xì)資料說(shuō)明

    有一些任務(wù)在運(yùn)行的時(shí)候,并不需要與用戶(hù)交互。它們通常在不打擾用戶(hù)其它工作的時(shí)候默默的執(zhí)行。這樣的任務(wù)后臺(tái)任務(wù)。與之對(duì)比,前臺(tái)任務(wù)就是用戶(hù)看
    發(fā)表于 05-07 16:42 ?5次下載
    LabVIEW教程之<b class='flag-5'>后臺(tái)任務(wù)</b>的詳細(xì)資料說(shuō)明

    虛擬機(jī):Linux查看路由信息的幾種方法

    虛擬機(jī):Linux查看路由信息的幾種方法
    的頭像 發(fā)表于 06-22 15:24 ?8256次閱讀
    虛擬機(jī):<b class='flag-5'>Linux</b>查看路由信息的<b class='flag-5'>幾種方法</b>

    Linux下運(yùn)行后臺(tái)任務(wù)幾種方法

    程序員最不能容忍的是在使用終端的時(shí)候往往因?yàn)榫W(wǎng)絡(luò),關(guān)閉屏幕,執(zhí)行CTRL+C等原因造成ssh斷開(kāi)造成正在運(yùn)行程序退出,使得我們的工作功虧一簣。
    的頭像 發(fā)表于 12-05 11:13 ?824次閱讀

    HarmonyOS后臺(tái)任務(wù)管理開(kāi)發(fā)指南上線!

    為什么要使用后臺(tái)任務(wù)?開(kāi)發(fā)過(guò)程如何選擇合適的后臺(tái)任務(wù)?后臺(tái)任務(wù)申請(qǐng)時(shí)存在哪些約束與限制? 針對(duì)開(kāi)發(fā)者使用后臺(tái)任務(wù)
    的頭像 發(fā)表于 11-28 21:10 ?687次閱讀
    HarmonyOS<b class='flag-5'>后臺(tái)任務(wù)</b>管理開(kāi)發(fā)指南上線!

    怎么在CentOS后臺(tái)運(yùn)行、關(guān)閉和查看后臺(tái)任務(wù)?

    怎么在CentOS后臺(tái)運(yùn)行、關(guān)閉和查看后臺(tái)任務(wù)
    的頭像 發(fā)表于 12-18 17:34 ?3074次閱讀