1. 程式人生 > >xshell一直連線中斷 守護程序

xshell一直連線中斷 守護程序

重新登入使用last指令檢視登入情況

 

pts的理解

who:檢視目前有誰線上 

pts是所謂的偽終端或虛擬終端,具體表現就是你開啟一個終端,這個終端就叫pts/0,如果你再開啟一個終端,這個新的終端就叫pts /1。

比如我們使用 ps -ef | grep nginx  裡面有的會顯示pts 如果是?就是沒有在任何終端執行,在後臺是守護程序

我們發現runserver 會有兩個程序

是因為django設定自動載入配置檔案的原因。在執行命令後面可以加--noreload這樣就只會顯示一個程序,但是修改檔案後,django不會主動去載入配置檔案。

如果settings.py中DEBUG=False時,django不會處理靜態檔案,這就可以使用--insecure引數強制django處理靜態檔案.

 

守護程序建立方法,linux下使用命令:

setsid python hello.py
關閉終端,程式也可以後臺執行。
使用 ps -aux 可以檢視當前程序。kill -9 [程序號]可關掉程式。

程式死掉也會退出程序

  Linux系統中grep命令是一種強大的文字搜尋工具  可查詢指定程序個數 ps -ef | grep nginx grep --color=auto nginx 這個是自身命令的程序 不需要kill ps -ef 表示顯示所有程序的訊息       守護程式,後臺執行

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

nohup/setsid/&

場景:

如果只是臨時有一個命令需要長時間執行,什麼方法能最簡便的保證它在後臺穩定執行呢?

linux程序後臺執行的幾種方法 <wbr>- <wbr>nohup/setsid/& <wbr>[轉載]
hangup 名稱的來由
在 Unix 的早期版本中,每個終端都會通過 modem 和系統通訊。當用戶 logout 時,modem 就會結束通話(hang up)電話。 同理,當 modem 斷開連線時,就會給終端傳送 hangup 訊號來通知其關閉所有子程序。
解決方法:

我們知道,當用戶登出(logout)或者網路斷開時,終端會收到 HUP(hangup)訊號從而關閉其所有子程序。因此,我們的解決辦法就有兩種途徑:要麼讓程序忽略 HUP 訊號,要麼讓程序執行在新的會話裡從而成為不屬於此終端的子程序。

1. nohup
nohup 無疑是我們首先想到的辦法。顧名思義,nohup 的用途就是讓提交的命令忽略 hangup 訊號。讓我們先來看一下 nohup 的幫助資訊:

NOHUP(1) User Commands NOHUP(1)

NAME
nohup - run a command immune to hangups, with output to a non-tty

SYNOPSIS
nohup COMMAND [ARG]...
nohup OPTION

DESCRIPTION
Run COMMAND, ignoring hangup signals.

--help display this help and exit

--version
output version information and exit
可見,nohup 的使用是十分方便的,只需在要處理的命令前加上 nohup 即可,標準輸出和標準錯誤預設會被重定向到 nohup.out 檔案中。一般我們可在結尾加上"&"來將命令同時放入後臺執行,也可用">filename 2>&1"來更改預設的重定向檔名。


nohup 示例
[[email protected] ~]# nohup ping www.ibm.com &
[1] 3059
nohup: appending output to `nohup.out'
[[email protected] ~]# ps -ef |grep 3059
root 3059 984 0 21:06 pts/3 00:00:00 ping www.ibm.com
root 3067 984 0 21:06 pts/3 00:00:00 grep 3059
[[email protected] ~]#

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

SETSID(8) Linux Programmer’s Manual SETSID(8)

NAME
setsid - run a program in a new session

SYNOPSIS
setsid program [ arg ... ]

DESCRIPTION
setsid runs a program in a new session.
可見 setsid 的使用也是非常方便的,也只需在要處理的命令前加上 setsid 即可。


setsid 示例
[[email protected] ~]# setsid ping www.ibm.com
[[email protected] ~]# ps -ef |grep www.ibm.com
root 31094 1 0 07:28 ? 00:00:00 ping www.ibm.com
root 31102 29217 0 07:29 pts/4 00:00:00 grep www.ibm.com
[[email protected] ~]#
值得注意的是,上例中我們的程序 ID(PID)為31094,而它的父 ID(PPID)為1(即為 init 程序 ID),並不是當前終端的程序 ID。請將此例與nohup例中的父 ID 做比較。

3. &
這裡還有一個關於 subshell 的小技巧。我們知道,將一個或多個命名包含在“()”中就能讓這些命令在子 shell 中執行中,從而擴展出很多有趣的功能,我們現在要討論的就是其中之一。

當我們將"&"也放入“()”內之後,我們就會發現所提交的作業並不在作業列表中,也就是說,是無法通過jobs來檢視的。讓我們來看看為什麼這樣就能躲過 HUP 訊號的影響吧。


subshell 示例
[[email protected]t107 ~]# (ping www.ibm.com &)
[[email protected] ~]# ps -ef |grep www.ibm.com
root 16270 1 0 14:13 pts/4 00:00:00 ping www.ibm.com
root 16278 15362 0 14:13 pts/4 00:00:00 grep www.ibm.com
[[email protected] ~]#
從上例中可以看出,新提交的程序的父 ID(PPID)為1(init 程序的 PID),並不是當前終端的程序 ID。因此並不屬於當前終端的子程序,從而也就不會受到當前終端的 HUP 訊號的影響了。

[轉載自 http://hi.baidu.com/ioah/blog/item/856b873f2596f2e955e7236d.html]

 

 

如果settings.py中DEBUG=False時,django不會處理靜態檔案,這就可以使用--insecure引數強制django處理靜態檔案.

 

守護程序建立方法,linux下使用命令:

setsid python hello.py
關閉終端,程式也可以後臺執行。
使用 ps -aux 可以檢視當前程序。kill -9 [程序號]可關掉程式。

程式死掉也會退出程序