Linux 將進程放入后臺執行,解決網絡,ssh斷開導致進程結束(nohup, setsid, , disown)...

Linux 將進程放入后臺執行,解決網絡,ssh斷開導致進程結束(nohup, ?setsid, ?&, disown)

1、nohup 命令

我們知道,當用戶注銷(logout)或者網絡斷開時,終端會收到 HUP(hangup)信號從而關閉其所有子進程。因此,我們的解決辦法就有兩種途徑:要么讓進程忽略 HUP 信號,要么讓進程運行在新的會話里從而成為不屬于此終端的子進程

nohup & 命令并不能從根本上解決ssh斷開問題。

1 [root@Searchsvc1 go-mysql-elasticsearch]# nohup tail -f nohup.out &
2 [1] 21509

pid所屬的父id為:21476

1 [root@Searchsvc1 go-mysql-elasticsearch]# ps -ef |grep tail
2 root     21509 21476 98 21:39 pts/1    00:01:17 tail -f nohup.out
3 root     21518 20971  0 21:40 pts/0    00:00:00 grep tail

通過 pstree ?-p 查看線程樹可知它屬于ssh的一個子線程,所以關閉ssh的時候,會將其子線程hangup。

1   ├─sshd(1472)─┬─sshd(20967)───bash(20971)───pstree(21516)
2         │            └─sshd(21472)───bash(21476)───tail(21509)

?

2、?setsid 命令

我們換個角度思考,如果我們的進程不屬于接受 HUP 信號的終端的子進程,那么自然也就不會受到 HUP 信號的影響了。setsid 就能幫助我們做到這一點。讓我們先來看一下 setsid 的幫助信息。

1 [root@Searchsvc1 go-mysql-elasticsearch]# setsid tail -f nohup.out 
2 [root@Searchsvc1 go-mysql-elasticsearch]# 2017/11/16 21:34:30 master.go:54: [info] save position (mysql-bin.000052, 98963482)
3 2017/11/16 21:35:13 master.go:54: [info] save position (mysql-bin.000052, 98966359)
setsid 命令會將結果信息輸出到控制臺,并沒有從真正意義上將線程轉向后臺執行
我們再來看下執行該命令后的進程的父pid:1 ,已經跟ssh已經沒有關系了。
1 init(1)─┬─abrtd(1572)
2         ├─acpid(1363)
3         ├─atd(1609)
4     
5         ├─sshd(1472)─┬─sshd(20967)───bash(20971)───pstree(21650)
6         │            └─sshd(21472)───bash(21476)
7         ├─tail(21645)

3、&命令,()命令

這里還有一個關于 subshell 的小技巧。我們知道,將一個或多個命名包含在“()”中就能讓這些命令在子 shell 中運行中,從而擴展出很多有趣的功能,我們現在要討論的就是其中之一。當我們將"&"也放入“()”內之后,我們就會發現所提交的作業并不在作業列表中,也就是說,是無法通過jobs來查看的。讓我們來看看為什么這樣就能躲過 HUP 信號的影響吧。

但用&能將進程轉向后臺,但是

1 ├─sshd(1472)─┬─sshd(20967)───bash(20971)───pstree(21662)
2         │            └─sshd(21472)───bash(21476)───tail(21655)

()命令

1 [root@Searchsvc1 go-mysql-elasticsearch]# (tail -f nohup.out)
2 2017/11/16 21:57:38 master.go:54: [info] save position (mysql-bin.000052, 99185120)
1  ├─sshd(1472)─┬─sshd(20967)───bash(20971)───pstree(21664)
2         │            └─sshd(21472)───bash(21476)───tail(21663)

從上面可以看出&,()都會將結果信息輸出到控制臺,而且轉向后臺的線程會因為ssh的關閉而影響,但是執行(tail -f nohup.out &)卻能改變結果,進程將不再屬于ssh的子進程

1         ├─sshd(1472)─┬─sshd(20967)───bash(20971)───pstree(21685)
2         │            └─sshd(21472)───bash(21476)
3         ├─tail(21683)

?

4、disown命令

我們已經知道,如果事先在命令前加上 nohup 或者 setsid 就可以避免 HUP 信號的影響。但是如果我們未加任何處理就已經提交了命令,該如何補救才能讓它避免 HUP 信號的影響呢?

  • disown -h?jobspec來使某個作業忽略HUP信號。
  • disown -ah?來使所有的作業都忽略HUP信號。
  • disown -rh?來使正在運行的作業忽略HUP信號。

需要注意的是,當使用過 disown 之后,會將把目標作業從作業列表中移除,我們將不能再使用jobs來查看它,但是依然能夠用ps -ef查找到它。

?

5、screen 命令

  • screen -dmS?session name來建立一個處于斷開模式下的會話(并指定其會話名)。
  • screen -list?來列出所有會話。
  • screen -r?session name來重新連接指定會話。
  • 用快捷鍵CTRL-a d?來暫時斷開當前會話。

?

?

6、PS命令

在ps命令中,“-T”選項可以開啟線程查看。下面的命令列出了由進程號為<pid>的進程創建的所有線程。

?ps -T -p <pid>

1 [root@Searchsvc1 go-mysql-elasticsearch]# ps -T -p 21813
2   PID  SPID TTY          TIME CMD

?

“SID”欄表示線程ID,而“CMD”欄則顯示了線程名稱。

7、 Top命令

top命令可以實時顯示各個線程情況。要在top輸出中開啟線程查看,請調用top命令的“-H”選項,該選項會列出所有Linux線程。在top運行時,你也可以通過按“H”鍵將線程查看模式切換為開或關。

1、 top -H

2、要讓top輸出某個特定進程<pid>并檢查該進程內運行的線程狀況:top -H -p <pid>。

?

Reference:

【1】

https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/

?

轉載于:https://www.cnblogs.com/hoojjack/p/7846839.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453997.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bzoj1927

1927: [Sdoi2010]星際競速Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2556 Solved: 1580[Submit][Status][Discuss] Description 10年一度的銀河系賽車大賽又要開始了。作為全銀河最盛大的活動之一&#xff0c;奪得這個項目的冠軍無疑是很多人的夢想&#xff0c;來自杰…

python until怎么用_python基礎之從認識python到python的使用

python的歷史&#xff1a;python的創始人是吉多范羅蘇姆(Guido van Rossum)&#xff0c;人稱“龜叔”&#xff0c;1989年圣誕節期間&#xff0c;Guido開始寫Python語言的編譯器。他希望這個叫做Python的語言能符合他的理想&#xff1a;創造一種C和shell之間&#xff0c;功能全面…

前端之同源策略 Jsonp 與 CORS

同源策略 同源策略&#xff08;Same origin policy&#xff09;是一種約定&#xff0c;它是瀏覽器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的&#xff0c;瀏覽器只是針對同…

vue新手入門——vue-cli搭建

首先說明&#xff0c;以下內容vue官網都有文檔&#xff0c;如果覺得麻煩啰嗦&#xff0c;請移步至 安裝-vue.js 。 準備工作&#xff1a; 1.下載并安裝node環境&#xff0c;一般情況下安裝好node之后&#xff0c;npm也會安裝好。具體安裝的話&#xff0c;百度大概能幫得上忙。 …

如何看懂源代碼–(分析源代碼方法)

我們在寫程式時&#xff0c;有不少時間都是在看別人的代碼。例如看小組的代碼&#xff0c;看小組整合的守則&#xff0c;若一開始沒規劃怎么看&#xff0c; 就會“嚕看嚕苦&#xff08;臺語&#xff09; ” 不管是參考也好&#xff0c;從開源抓下來研究也好&#xff0c;為了了解…

linux關于安裝

一&#xff0e;安裝gcc gcc cloog-ppl ppl(libppl.so.7/libppl_c.so.2) cpp mpfr(libmpfr.so.1) gcc-c libstdc-devel mpfr-2.4.1-6.el6.i686.rpm和ppl-0.10.2-11.el6.i686.rpm 快捷鍵rz sz&#xff1a; rz、sz命令沒找到&#xff1f; 安裝lrzsz即可&#xff1a; shell># y…

python cmath模塊_cmath模塊-PYTHON

這是一個float型的常數>>> cmath.e2.718281828459045>>> type(cmath.e)文檔>>> import cmath>>> help(cmath)Help on module cmath:NAMEcmathFILE/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cm…

Python 第三方模塊之 pdfkit

pdfkit&#xff0c;把 HTMLCSS 格式的文件轉換成 PDF 格式文檔的一個工具。 其實&#xff0c;pdfkit 是 html 轉成 pdf 工具包 wkhtmltopdf 的 Python 封裝。所以&#xff0c;首先安裝 wkhtmltopdf 。 一般情況下&#xff0c;wkhtmltopdf需要手動安裝&#xff0c;網站是 https…

LNMP環境添加第三方模塊

一.在LNMP環境下添加memcache模塊 1.安裝依賴庫(libevent) [rootnode1 ~]# tar xvf libevent-2.0.21-stable.tar.gz [rootnode1 ~]# cd libevent-2.0.21-stable [rootnode1 libevent-2.0.21-stable]# ./configure --prefix/usr/local/libevent [rootnode1 libevent-2.0.21-sta…

學生成績管理系統-程序維護

托管平臺地址&#xff1a;https://gitee.com/lucess/StudentMarkManage.git 小組名稱:干翻沈師 程序運行方法: 1、后臺服務&#xff1a;進入項目文件夾執行 python TeamProject.py runsercer 0.0.0.0:5050 2、前臺服務&#xff1a;進入./WEB-INFO/TeamProjectWeb 文件夾執行 ya…

改需求

轉載于:https://www.cnblogs.com/gw2010/p/7856484.html

架構師一般做到多少歲_軟件測試可以做到多大歲數?

做這個行業也幾年了&#xff0c;經常聽到有人問&#xff0c;軟件測試這個行業能干到多少歲&#xff0c;當然里邊包含想要進入這個行業的和已經在這個行業里邊發展的&#xff01;基本上軟件測試可以分為三條職業發展路線&#xff1a;技術路線、管理路線、產品路線&#xff01;目…

Python 第三方模塊之 MySQL數據庫連接模塊 PyMySQL

PyMySQL的安裝 pip install PyMySQL python連接數據庫 import pymysqlconn pymysql.connect(hostlocalhost, userroot, password"root",databasedb, port3306, # 數字3306charsetutf8, # 不是utf-8autocommitTrue # autocommitTrue 讓每次提交都去調用…

初學Spring Boot

1.Spring Boot注解 (1)SpringBootApplication開啟了Spring的組件掃描和Spring Boot的自動配置,實際上&#xff0c;SpringBootApplication是將三個注解組合在了一起&#xff0c;這三個注解分別是 SpringBootConfiguration&#xff0c;ComponentScan&#xff0c;Ena…

15條常用的視頻音頻編輯腳本命令(mencoder/ffmpeg等)

可以把它當快速簡易參考看&#xff0c;主要的功能有&#xff1a; 視頻格式轉換音頻格式轉換切割視頻及音頻連接兩段視頻視頻音頻同步將圖像系列轉換成視頻 這里是百鬼丸以前收集的一部分命令行視頻音頻編輯腳本命令&#xff0c;一直在自己的記事本里隨時用&#xff0c;現在…

python rowcount_PyQt(Python+Qt)學習隨筆:QTableWidget的currentItem、rowCount、columnCount等部件狀態屬性訪問方法...

老猿將QTableWidget表格部件中反映部件當前情況的一些方法歸類為部件狀態訪問方法&#xff0c;包括部件的行數、列數、當前項、當前行、當前列等屬性訪問方法。1、行數rowCountQTableWidget的rowCount屬性保存表格部件中的行數&#xff0c;在QTableWidget創建時如果沒有指定行數…

Python 內置模塊之 random

常用API import random# 隨機小數 print(random.random()) # 大于0且小于1之間的小數。0< n<1.0 print(random.uniform(1,3)) # 大于1小于3的小數# 隨機整數 print(random.randint(1,5)) # 大于等于1且小于等于5之間的整數#從指定范圍內&#xff0c;按指定基…

微信jssdk遇到的一些問題匯總

1.用戶手動去觸發的接口可以直接調用比如wx.startRecord(); 但是寫在頁面加載完成里就無效&#xff0c;需要寫在 wx.ready(function(){wx.startRecord(); }); 才會有效。 2.h5 的audio標簽只支持ogg,mp3,wav格式的音頻&#xff0c;微信jssdk錄制的是amr格式的語音文件&#xf…

mongodb簡單的增刪改查

數據庫操作&#xff1a; show dbs;#查看數據庫use test;#如果沒有就創建一個db;#查看當前數據庫db.dropDatabase();#刪除數據庫 數據操作&#xff1a;show collections&#xff1b;#查看集合創建集合、插入&#xff1a;create collection;#創建集合db.student.insert({"na…

ffmpeg-0.8 開源編碼解碼庫從linux下移植到windows vs2005

最新 ffmpeg-0.8 開源編碼解碼庫&#xff0c;從linux下移植到windows vs2005&#xff0c;全部開源。需要 Intel C Compile 和 開源的SDL庫支持&#xff0c;由于 Intel C Compile支持C99語法&#xff0c;所以源代碼改動很小很小。主要的修改1&#xff1a;添加了linux中有而windo…