tft每日頭條

 > 圖文

 > linux程序在後台運行命令

linux程序在後台運行命令

圖文 更新时间:2025-01-06 12:06:55

今天就給大家介紹linux中幾種後台任務的執行方法避免上述問題。

linux程序在後台運行命令(Linux下幾種運行後台任務的方法)1

1.問題的引入

程序員最不能容忍的是在使用終端的時候往往因為網絡,關閉屏幕,執行CTRL C等原因造成ssh斷開造成正在運行程序退出,使得我們的工作功虧一篑。

其背後的主要原因在于上述的相關操作,shell默認會發送中斷信号給該終端session關聯的進程,從而導緻進程跟随終端退出,為了弄清這個問題我們首先要了解兩種中斷信号:

1)sigint:signal interrupt,ctrl c會發送此信号,主動關閉程序

2)SIGHUP: signal hang up,關閉終端,網絡斷線,關閉屏幕會發送此挂斷信号。

今天就給大家介紹linux中幾種後台任務的執行方法避免上述問題。

2 & 符号

這是一種把 &放在執行命令最後,使啟動的程序忽略sigint信号,此時執行ctrl c關閉就不會關閉此進程,但是當屏幕關閉,斷網仍然會造成進程退出。

sh test.sh &

3.nohup指令

nohup(no hang up),意思就是不挂斷運行,用nohup運行命令可以使命令永久執行下去,和用戶終端沒有關系,斷開SSH不影響運行,nohup捕獲了SIGHUP,并做了忽略處理,因此當屏幕關閉,斷網等造成ssh中斷時進程不會退出。但是ctrl c可以關閉關閉該進程。因此大多數情況同時使用nohup和&啟動的程序,ctrl c和關閉終端都無法關閉。在缺省情況下所有輸出都被重定向到一個名為nohup.out的文件中。

nohup指令基本使用格式:

nohup Command \[ Arg ... \] \[ & \]

舉例

後台不中斷執行./test.sh,stdout輸出給out.log,stderr輸出給err.log

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

相關的數字含義如下:

  • 0 – stdin (standard input),
  • 1 – stdout (standard output),顯然 nohup command > out.log 等價于 nohup command 1> out.log,是缺省行為。
  • 2 – stderr (standard error)

可能你也會見到這種寫法,其含義是把stderr也重定向給stdin

nohup ./test.sh > out.log 2>&1 &

4.ctrl z、jobs、fg、bg

如果我們程序在啟動的時候并沒有使用&,nohup怎麼辦呢,難道我們需要先執行ctrl c将在前台執行的進程終止執行再重新啟動嗎,顯然有好的方法!

4.1 ctrl z

将一個正在前台執行的作業進程放到後台,并且暫停,用術語講就是挂起,執行後如下:

[1] Stopped ./test.sh

4.2 jobs

查看當前有多少在後台運行的命令,[jobnumber] 就是作業号。

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

4.3 bg

将後台中暫停(挂起)的作業進程繼續運行,例如把1号作業(./test.sh) 放到後台運行,注意看已經帶了&

bg 1 [1] ./test.sh &

4.4 fg

将後台中的作業進程調至前台繼續運行,例如把2号作業(./test2.sh &)調至前台運行

fg 2 ./test2.sh

5.screen命令

5.1 介紹

如果說上面的方法是通過linux 相關本身命令實現了前後台任務調度,那麼screen就提供了另外一種思路。

不說人話的版本:GNU Screen是一款由GNU計劃開發的用于命令行終端切換的自由軟件。用戶可以通過該軟件同時連接多個本地或遠程的命令行會話,并在其間自由切換。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了統一的管理多個會話的界面和相應的功能。

說人話的版本: 我們可以粗略地認為screen是一個虛拟終端軟件,直接在linux系統裡面啟動了另外一個後台程序接管(維持)了你的終端會話,當你直接連接的終端ssh斷開時他仍然讓程序認為你的ssh持續鍊接着,這樣也就不會出現進程接收到中斷信号而退出。

5.2 安裝

yum install screen

5.3 使用

1)新建會話

screen -S yourname -> 新建一個叫yourname的session

2) 列出當前所有的session

screen -ls

3)恢複會話(回到yourname這個session)

screen -r yourname

4) detach某個session

screen -d yourname -> 遠程detach某個session screen -d -r yourname -> 結束當前session并回到yourname這個session

5)删除會話

screen -S pid-X quit

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved