linux環境下的各種后台執行


有時候會需要一些進程后台執行,此處針對各種情況記錄一下

已知此進程需要后台運行,且此進程還未運行

  1. nohup命令: 
    顧名思義,nohup的用途就是讓提交的命令忽略所有的hangup信號。
    使用方法:nohup COMMAND [ARG]...

     

  2. setsid命令:
    在一個新的會話中運行命令,從而可以避開當前終端發出的HUP信號。
    使用方法:setsid COMMAND [ARG]...

     

  3. &:
    可以結合()產生一個新的子shell並在這個子shell中將任務放置到后台運行,從而不受當前shell終端的HUP信號影響。
    使用方法:(COMMAND [ARG]... &)
    
    而我通常的使用方式為:
    nohup ./filename.sh > filename.log 2>&1 &
    nohup ./filename.sh &> filename.log &
    三點理由:
    1)nohup保障進程不會被hangup信號異常中斷;
    2)將任務放置到后台運行,不占用當前的終端;
    3)將錯誤輸出也打印到log中,默認>只有標准輸出,錯誤輸出沒有。
  4.  通過screen等命令:
    screen是建立一個新的全屏虛擬會話終端,這個會話只有在手動輸入exit的時候才會退出,在這個會話里執行的命令不用擔心HUP信號會對我們的進程造成影響,因此也不用給每個命令前都加上“nohup”或“setsid”了,非常適合我們有規划的執行大量的后台任務,可以非常方便的讓我們對這些后台任務進行管理。
    
    使用方法:
    screen //立即創建並進入一個會話。
    screen -dmS {name} //建立一個處於掛起模式下的會話,並根據我們的需要指定其會話名稱。
    screen -dmS {name} {script} //在建立會話時同時執行指定的命令或腳本
    screen -list //列出所有會話。
    screen -r {name} //以獨占方式進入指定會話。
    screen -x {name} //以並行方式進入指定會話。
    ctrl +ad //輸入快捷鍵ctrl +a和d,可暫時退出當前會話。
    exit //進入指定會話后執行exit即可關閉該會話。

     

針對已經運行的進程,需要放置到后台運行

  1. 通過ctrl+z,bg,fg,disown
    通過以下命令,我們可以對放入到后台的命令進行控制
    
    查看當前終端下的后台進程:
    直接執行:jobs
    
    將查看到的某個后台進程放回到前台:
    直接輸入:fg {jobid} //這里的{jobid}是通過jobs命令中看到的進程前[]中的數字。
    
    將當前正在前台運行的進程放到后台運行:
    先敲下快捷鍵:ctrl +z //暫停當前正在運行的進程。
    再執行:bg
    
    終止當前正在前台運行的進程:
    直接敲下快捷鍵:ctrl +c
    
    disown
    亡羊補牢,為沒有使用nohup與setsid的進程加上忽略HUP信號的功能。
    使用方法:
    將當前正在前台運行的進程放到后台運行;
    然后執行disown -h %{jobid} //這里的{jobid}是通過jobs命令中看到的進程前[]中的數字。
  2. reptyr命令+screen命令配合使用:
    reptyr需要單獨安裝,
    ubuntu(apt-get install reptyr)
    作用:
    把沒有辦法把后台的進程帶到當前的pty里來而不終止任務
    這樣我們可以結合screen等將當前正在運行的任務放到后台而不終止
    
    使用:
    screen -S {name} #新建一個screen進程
    ps -ef|grep now_run_proc #獲取當前運行進程的PID
    reptyr {pid} #將當前運行的進程切換到screen下運行
    ctrl+a+d #退出screen
    
    此時進程已經放到后台執行,回家喝茶等結果。。

參考,引用說明:

1,Linux 技巧:讓進程在后台可靠運行的幾種方法 (IBM)

2,Linux運行與控制后台進程的方法:nohup, setsid, &, disown, screen 

3,reptyr的使用 (知乎)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM