1. 程式人生 > >linux後臺執行程式(secureCRT斷掉或關閉後繼續執行程式)

linux後臺執行程式(secureCRT斷掉或關閉後繼續執行程式)

secureCRT斷掉後想繼續執行程式。也就是程式會在後臺一直執行到結束。

secureCRT通過ssh聯接到client端執行程式,如果關掉視窗或者斷開連線時,任務會被kill。

為了程式能夠後臺執行到結束:

1.可以用&:

比如 Python test.py 改成 python test.py &

來呼叫執行。

2.另外,還有一種方式:通過ctrl+z、bg等一系列的命令,將已經在前臺執行的作業放到後臺執行:

如果一個作業已經在前臺執行,可以通過ctrl+z將該作業放到後臺並掛起。然後通過jobs命令檢視在後臺執行的作業並找到對應的作業ID,執行bg %n(n為通過jobs查到的作業ID)喚醒該作業繼續執行。
該方式也存在結果會輸出到終端上的情況,同樣可以用重定向的方法解決
相關命令:
jobs------------檢視在後臺執行的程序
fg %n----------將後臺執行程序n調到前臺執行,n表示jobnumber(通過jobs檢視的程序編號,而非pid)
ctrl+z----------將在前臺執行的程序,放到後臺並掛起
bg %n---------將在後臺掛起的程序,繼續執行
ctrl+c----------前臺程序終止
kill %n---------殺掉後臺執行的程序,n表示jobnumber(通過jobs檢視的程序編號,而非pid)

但上面來兩種方法只能解決disconnect時的問題。

如果關閉客戶端,程式一樣無法執行。當用戶登出或者網路中斷時,終端後收到SIGHUP訊號,從而關閉其所有子程序。

這就要使用nohup執行

3.nohup命令:nohup + command 

如 nohup python test.py

nohup就是不掛起的意思,nohup命令會忽略SIGHUP訊號,從而終端退出時不會影響到後臺作業。後臺執行把終端輸出存放在當前目錄下的nohup.out檔案中。客戶端關機後重新登陸伺服器可以直接檢視。

4.此外還有screen命令方式也可以實現,不介紹了。

程式執行後用

ps -ef  | grep '進行id'

或者ps -aux 來檢視後來多少進行正在執行,grep自己的使用者名稱,可以看到對應程式

原理如下:

Linux/Unix中,有這樣幾個概念:
程序組(process group):一個或多個程序的集合,每一個程序組有唯一一個程序組ID,即程序組長程序的ID。
會話期(session):一個或多個程序組的集合,有唯一一個會話期首程序(session leader)。會話期ID為首程序的ID。
會話期可以有一個單獨的控制終端(controlling terminal)。與控制終端連線的會話期首程序叫做控制程序(controlling process)。當前與終端互動的程序稱為前臺程序組。其餘程序組稱為後臺程序組。
根據POSIX.1定義:
結束通話訊號(SIGHUP)預設的動作是終止程式。
當終端介面檢測到網路連線斷開,將結束通話訊號傳送給控制程序(會話期首程序)。
如果會話期首程序終止,則該訊號傳送到該會話期前臺程序組。
一個程序退出導致一個孤兒程序組中產生時,如果任意一個孤兒程序組程序處於STOP狀態,傳送SIGHUP和SIGCONT訊號到該程序組中所有程序。
因此當網路斷開或終端視窗關閉後,控制程序收到SIGHUP訊號退出,會導致該會話期內其他程序退出。

test.py測試指令碼:

[[email protected] test]$ cat test.py
import time
dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}
for k in dict:
  print "dict[%s]="%k,dict[k]

key="c"
if "c" not in dict:
  print "it is not in %s" %key

print "-------------"
print dict.items()
print dict.keys()
print dict.values()

print "-------------"
iter = dict.iteritems()
for it in iter:
  print "iteritems is:",it
  print type(it)

print "-------------"
key_iter = dict.iterkeys()
for ki in key_iter:
  print "key_iter is",ki
  print type(ki)


print "-------------"
val_iter = dict.itervalues()
for vi in val_iter:
  print "val_iter is",vi
  print type(vi)
print "-------------"

print "Start: %s" % time.ctime()
time.sleep(20)
print "End: %s" % time.ctime()

f=open('result','w')
f.write('this is my test for breakup, and to find whether we can finish job')

time.sleep(20)
f.write('\nafter we break the dialog')
f.close

nohup python test.py執行後。關閉客戶端,重新登入後,可以檢視nohup.out檢視執行時螢幕輸出。同時檢視result看生成結果。

相關推薦

linux後臺執行程式secureCRT斷掉關閉繼續執行程式

secureCRT斷掉後想繼續執行程式。也就是程式會在後臺一直執行到結束。 secureCRT通過ssh聯接到client端執行程式,如果關掉視窗或者斷開連線時,任務會被kill。 為了程式能夠後臺執行到結束: 1.可以用&: 比如 Python test.p

Linux在64位執行32位程式安裝32位庫:rpm、deb

記錄: ------------------------------------------------------------------- centos7.x 安裝了glibc:glibc-2.17-157.el7.i686 glibc-2.17 nodeps安裝,即可

編寫一個個人微信小程式安裝,建立,編寫,執行

一、微信小程式  微信公眾平臺    https://mp.weixin.qq.com/cgi-bin/wx 二、下載開發工具  https://developers.weixin.qq.com/miniprogram/dev/de

遠端連線Linux,如何使程式斷開連線繼續執行

遠端連線到Linux終端後,如果發生意外或者人為斷開了遠端連線,那麼正在執行的程式或命令(例如備份資料庫這種比較耗時的操作)就會中斷。原因是因為斷開連線後,終端會收到SIGHUP(hang-up 結束通話)訊號從而關閉該會話期的子程序。

Linux下使用nohup讓一個程式在退出登陸繼續執行

Linux下如果想讓一個程式在後臺執行,很多都是使用 & 在程式結尾處來實現的,比如我們想讓mysqld在後臺執行: /usr/local/mysql/bin/mysqld_safe –user=mysql & 但是Linux下有很多程式並不像mysq

Jquery 瀏覽器頁面視窗重新整理關閉時,執行後臺方法(相容各主流瀏覽器)

//頁面載入時方法 $(document).ready(function () { //網頁關閉時執行的方法 $(window).bind("beforeunload", function () {

asp.net 按鈕執行前後臺方法——前臺彈出提示信息,確認繼續執行後臺方法,取消則不執行後臺方法

一個 inf ret font AD itl 博客 www. asp.net 我們做一個測試的web頁面,只需要一個button+一個label就ok啦,通過button按鈕的後臺事件修改label的text屬性值來測試是否執行了後臺事件裏的代碼 前臺 寫一個js方法:

vue搭建後臺管理頁面點擊左側導航,切換右側內容

htm right 後臺 opd imp page con com ng- home.vue頁面 <template> <div style="background-color: #EBEBEB;min-height:900px">

JavaWeb專案練習--支付模組、後臺部分模組手風琴下拉選單、上傳技術

易寶支付 線上支付的兩種形式: 1. 電商與銀行直連! 安全 不收手續費 不與小電商合作! 2. 第三臺支付平臺 支付寶 易寶 財富通 好處: 不安全 收手續費(1%) 小電商可以與其合作! 需要在第三方註冊賬戶 需要認證! 我

Linux作業系統實驗一在VMware安裝Red Hat Enterprise 6.X

開啟VMware——建立新的虛擬機器————典型(推薦)——下一步 安裝程式光碟映像檔案——開啟系統所在的映像檔案——下一步 輸入系統的名稱和自己的使用者名稱 密碼——下一步 輸入虛擬機器的名稱和位置——下一步 輸入合適的最大磁碟大小

深入理解Java虛擬機器(七)位元組碼執行引擎棧幀、動態連線、方法呼叫

執行引擎是Java虛擬機器最核心的組成部分之一。“虛擬機器”是一個相對於“物理機”的概念,這兩種機器都有程式碼執行能力,其區別是物理機的執行引擎是直接建立在處理器、硬體、指令集和作業系統層面上的,而虛擬機器的執行引擎則是由自己實現的,因此可以自行制定指令集與執行引擎的結構體系,並且能夠執

Linux權限管理用戶、組、文件管理

參數 id號 逗號 獨立 gpasswd pip who 結束 目錄 一、 Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 1、 文件查看類命令cat,tac, head, tail, more, less, ls ,file: -ls : lis

人社部核三通用資料庫表定期優化效能shell執行指令碼純個人整理,不涉及公司機密

fx.sh內容(注意修改自己的路徑) #!/usr/bin/sh  umask 022 export PS1="`/usr/bin/hostname`-> " export ORACLE_BASE=/u01/app/oracle export ORACLE_HOM

matlab練習程式神經網路識別mnist手寫資料集

記得上次練習了神經網路分類,不過當時應該有些地方寫的還是不對。 這次用神經網路識別mnist手寫資料集,主要參考了深度學習工具包的一些程式碼。 mnist資料集訓練資料一共有28*28*60000個畫素,標籤有60000個。 測試資料一共有28*28*10000個,標籤10000個。 這裡神經網路輸入

利用winrar製作exe程式,如何配置解壓自動執行

轉自:https://blog.csdn.net/shann09/article/details/27497901 rar自解壓安裝,且解壓後自動執行某程式 1,winRAR能夠打包成自解壓的exe檔案,並且設定解壓前或解壓後執行某個程式 2,選擇要壓縮的所有檔案,右鍵“新增到壓縮檔案” 3,勾

Win7怎麼開啟關閉dep資料執行保護

由於現在做自助簽註裝置軟體開發,啟用航信簽註模組服務是需要關閉資料保護,因此。。。。。 開啟資料保護: 1.使用管理員身份執行命令視窗 2.輸入bcdedit.exe/set {current} nx AlwaysOn pause並按回車,此時提示操作成功完成,表示已成

Linux 操作命令 cp忙了一陣,特來更新 一下

mtime 多個 文件比較 ber 更新 源文件 指定權限 clob ORC 1、簡介     cp 命令是 copy 的縮寫     2、主要功能    

【Qt】Qt的執行兩種QThread類的詳細使用方式

Qt提供QThread類以進行多工處理。與多工處理一樣,Qt提供的執行緒可以做到單個執行緒做不到的事情。例如,網路應用程式中,可以使用執行緒處理多種聯結器。 QThread繼承自QObject類,且提供QMutex類以實現同步。執行緒和程序共享全域性變數,可以使用互斥體對改變後的全域性變數值

spark遠端debug之除錯spark on yarn 程式基於CDH平臺,1.6.0版本

簡介 由於spark有多種執行模式,遠端除錯的時候,雖然大體步驟相同,但是還是有小部分需要注意的地方,這裡記錄一下除錯執行在spark on yarn模式下的程式。 環境準備 需要完好的Hadoop,spark叢集,以便於提交spark on yarn程式。我這裡是基

hadoop初識之三:搭建hadoop環境配置HDFS,Yarn及mapreduce 執行在yarn上及三種執行模式本地模式,偽分散式和分散式介

--===============安裝jdk(解壓版)================== --root 使用者登入 --建立檔案層級目錄    /opt下分別 建 modules/softwares/datas/tools 資料夾 --檢視是否安裝jdk    rpm -