天天看點

linux程式已經在背景運作當機了_linux 讓程式在背景運作的幾種可靠方法

我們經常會碰到這樣的問題,用 telnet/ssh 登入了遠端的 Linux 伺服器,運作了一些耗時較長的任務, 結果卻由于網絡的不穩定導緻任務中途失敗。如何讓指令送出後不受本地關閉終端視窗/網絡斷開連接配接的幹擾呢?下面舉了一些例子, 您可以針對不同的場景選擇不同的方式來處理這個問題。

先介紹一下hangup 名稱的來由

在 Unix 的早期版本中,每個終端都會通過 modem 和系統通訊。當使用者 logout 時,modem 就會挂斷(hang up)電話。 同理,當 modem 斷開連接配接時,就會給終端發送 hangup 信号來通知其關閉所有子程序。

nohup/setsid/&

場景:

如果隻是臨時有一個指令需要長時間運作,什麼方法能最簡便的保證它在背景穩定運作呢?

解決方法:

我們知道,當使用者登出(logout)或者網絡斷開時,終端會收到 HUP(hangup)信号進而關閉其所有子程序。是以,我們的解決辦法就有兩種途徑:要麼讓程序忽略 HUP 信号,要麼讓程序運作在新的會話裡進而成為不屬于此終端的子程序。

1、nohup的使用

nohup 無疑是我們首先想到的辦法。顧名思義,nohup 的用途就是讓送出的指令忽略 hangup 信号。

nohup 的使用是十分友善的,隻需在要處理的指令前加上 nohup 即可,标準輸出和标準錯誤預設會被重定向到 nohup.out 檔案中。一般我們可在結尾加上"&"來将指令同時放入背景運作,也可用">filename 2>&1"來更改預設的重定向檔案名。

nohup 示例

nohup ping baidu.com &

2。setsid

nohup 無疑能通過忽略 HUP 信号來使我們的程序避免中途被中斷,但如果我們換個角度思考,如果我們的程序不屬于接受 HUP 信号的終端的子程序,那麼自然也就不會受到 HUP 信号的影響了。setsid 就能幫助我們做到這一點。讓我們先來看一下 setsid 的幫助資訊

setsid 示例setsid ping baidu.com

screen

場景:

我們已經知道了如何讓程序免受 HUP 信号的影響,但是如果有大量這種指令需要在穩定的背景裡運作,如何避免對每條指令都做這樣的操作呢?

解決方法:

此時最友善的方法就是 screen 了。簡單的說,screen 提供了 ANSI/VT100 的終端模拟器,使它能夠在一個真實終端下運作多個全屏的僞終端。screen 的參數很多,具有很強大的功能,我們在此僅介紹其常用功能以及簡要分析一下為什麼使用 screen 能夠避免 HUP 信号的影響。

使用 screen 很友善,有以下幾個常用選項:

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

screen -ls -> 列出目前所有的session

screen -r yourname -> 回到yourname這個session

screen -d yourname -> 遠端detach某個session

screen -d -r yourname -> 結束目前session并回到yourname這個session

Screen中止某個會話(session)

screen -S some_name -X quit

screen 示例

1.建立一個叫yourname的終端

screen -S newname

2.可運作要執行的指令

ping baidu.com

3.C-a d -> detach,暫時離開目前session,将目前的 screen session (可能含有多個 windows) 丢到背景執行,并會回到還沒進 screen 時的狀态,此時在 screen session 裡,每個 window 内運作的 process (無論是前台/背景)都在繼續執行,即使 logout 也不影響。

【java】 linux下利用nohup背景運作jar檔案包程式

Linux 運作jar包指令如下: 方式一: java -jar XXX.jar 特點:目前ssh視窗被鎖定,可按CTRL + C打斷程式運作,或直接關閉視窗,程式退出 那如何讓視窗不鎖定? 方式二 ...

linux nohup指令實作退出終端後程式繼續背景運作

Unix/Linux下一般想讓某個程式在背景運作,很多都是使用&在程式結尾來讓程式自動運作:但如果要想在退出終端後,程式依然還在背景運作,則要用nohup與&組合來實作. nohup ...

linux nohup指令使程式在背景運作的方法

在linux作業系統中從背景一直運作某個程式的方法,就是使用nohup指令了. Unix/Linux下一般比如想讓某個程式在背景運作,很多都是使用 & 在程式結尾來讓程式自動運作. 比如要運作 ...

Linux --- 程式背景運作的幾種方法

有時候我們運作一個程式,耗時比較長,是以在快下班的時候或是網絡不穩定的時候就比較抓狂. 今天分享幾個我在工作中用到的把程式放在背景運作的方法. nohup $ nohup --h Usage: noh ...

Linux下java nohup 背景運作關閉後程序停止的原因,不挂斷背景運作指令

Linux下java nohup 背景運作關閉後程序停止的原因,不挂斷背景運作指令 今天寫sh腳本發現一終止指令程式就停止運作了,檢查了很久才發現後面少了個&字元導緻的!錯誤寫法:nohup ...

Ubuntu中如何使得程式在背景運作

Ubuntu中如何使得程式在背景運作 一.前言 在Ubuntu中有的程式啟動需要執行改程式./bin目錄下的檔案,并且啟動之後這個shell就不能使用和關閉了,非常的麻煩,是以就有了相應的指令來解決這 ...

Linux scp 設定nohup背景運作

Linux scp 設定nohup背景運作 1.正常執行scp指令 2.輸入ctrl + z 暫停任務 3.bg将其放入背景 4.disown -h 将這個作業忽略HUP信号 5.測試會話中斷,任務繼 ...

iOS開發小技巧--iOS程式進入背景運作的實作

iOS程式進入背景運作的實作 視訊中看到老師用的iOS7,代碼中有開啟timer,無限請求資料的功能,但是切換到背景,代碼就不列印了 自己用的iOS9,進入背景還是可以列印的,再次進入前台也可以正常運 ...

在windows中:輕按兩下運作Python程式、背景運作Python程式

在windows中:輕按兩下運作Python程式.背景運作Python程式 安裝Python解釋器的windows環境,如果輕按兩下運作*.py的檔案,會閃退.怎樣避免閃退呢? 我們用python的日志輸出程 ...

随機推薦

python利用xmlrpc方式對odoo資料表進行增删改查操作

# -*- encoding: utf-8 -*- import xmlrpclib #導入xmlrpc庫,這個庫是python的标準庫. username ='admin' #使用者登入名 pwd = ...

面向對象設計SOLID五大原則

轉載自:碼農社群,http://w3croom.com/read.php?tid-4522.html 今天我給大家帶來的是面向對象設計SOLID五大原則的經典解說.       我們知道,面向對象對于 ...

servlet下載下傳,解決檔案名中有中文下載下傳路徑出現亂碼不能正常下載下傳問題

方法很多種,我隻試用了兩種. 首頁面JSP中引入下載下傳功能所需的js檔案.引入的時候設定編碼格式例如

以前用JAVAscript實作過令文本逐字輸出的效果,今天我來用html5中的canvas實作一下.canvas裡的内容可不像

那樣好操作,首先,你需要懂得一些html5的API才能操 ...

當 ReactJS 遇到 TypeScript

由于本人應用項目主要是2B的web應用程式, 是以以下暫不談react的服務端渲染和react navie, 先說說ReactJS: React 的元件化和  資料單向綁定 的模式(flux) 使應用 ...

iOS sourceTree忽略掉必要的xcuserdata檔案

1.找到git對應的檔案 git status 結果 會得到已經修改的檔案. modified: Zing.xcodeproj/xcuserdata/tiny.xcuserdatad/xcscheme ...

C#C/S架構示範 (MES系統)

之前做過一個MES系統,發一些裡面的截圖.如果有朋友也用這個架構.或者有興趣可以一起學習學習.使用開發工具VS2013,資料庫SqlServer2008和Oracle11C.插件dev15.2,開發模 ...

Mac編譯RocketMQ 4.1.0

參考:https://my.oschina.net/jayronwang/blog/861396 1. 前提先安裝并設定好maven,jdk,git,這個網上有很多教程,就不講了 2. 下載下傳rocke ...

Android通訊:通話

Android通訊之通話功能的實作: 在Android中,android.telephony.TelephonyManager對象是開發者擷取目前通話網絡相關資訊的視窗,通過TelephonyMana ...

主動觸發事件 自定義事件 trigger 及其用法

1. 觸發自定義事件方式 js.jq 2. jq 觸發 2.1 預設支援的事件 $('#h').on('click',function(){ $(this).append('

p&lt ...