last指令
重新登錄使用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 表示顯示所有進程的消息
守護程序,后台運行
nohup/setsid/& 兩種方法都可以實現
在后台運行一般兩個一起用 :
nohup command &
setsid command
nohup 與 & 區別
在於,是否有標准輸入
1. sh test.sh &
將sh test.sh任務放到后台 ,關閉xshell,對應的任務也跟着停止。
2. nohup sh test.sh
將sh test.sh任務放到后台,關閉標准輸入,終端不再能夠接收任何輸入(標准輸入),重定向標准輸出和標准錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。
3. nohup sh test.sh &
將sh test.sh任務放到后台,但是依然可以使用標准輸入,終端能夠接收任何輸入,重定向標准輸出和標准錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。
原理
hangup 名稱的來由:
在 Unix 的早期版本中,每個終端都會通過 modem 和系統通訊。當用戶 logout 時,modem 就會掛斷(hang up)電話。 同理,當 modem 斷開連接時,就會給終端發送 hangup 信號來通知其關閉所有子進程。
解決方法:我們知道,當用戶注銷(logout)或者網絡斷開時,終端會收到 HUP(hangup)信號從而關閉其所有子進程。因此,我們的解決辦法就有兩種途徑:要么讓進程忽略 HUP 信號,要么讓進程運行在新的會話里從而成為不屬於此終端的子進程。
1. nohup (不掛斷地運行命令)
nohup 無疑是我們首先想到的辦法。顧名思義,nohup 的用途就是讓提交的命令忽略 hangup 信號。
可見,nohup 的使用是十分方便的,只需在要處理的命令前加上 nohup 即可,標准輸出和標准錯誤缺省會被重定向到 nohup.out 文件中(當前文件夾)。一般我們可在結尾加上"&"來將命令同時放入后台運行,也可用">filename 2>&1"來更改缺省的重定向文件名。重定向文件名
2>&1是將標准錯誤(2)重定向到標准輸出(&1),標准輸出(&1)再被重定向輸入到myout.file文件中。
[root@pvcent107 ~]# nohup ping www.ibm.com &
[1] 3059
nohup: appending output to `nohup.out'
[root@pvcent107 ~]# 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
[root@pvcent107 ~]#
2.& (后台運行相當於新開了一個終端)
這里還有一個關於 subshell 的小技巧。我們知道,將一個或多個命名包含在“()”中就能讓這些命令在子 shell 中運行中,從而擴展出很多有趣的功能,我們現在要討論的就是其中之一。當我們將"&"也放入“()”內之后,我們就會發現所提交的作業並不在作業列表中,也就是說,是無法通過jobs來查看的。讓我們來看看為什么這樣就能躲過 HUP 信號的影響吧。
subshell 示例
[root@pvcent107 ~]# (ping www.ibm.com &)
[root@pvcent107 ~]# 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
[root@pvcent107 ~]#
從上例中可以看出,新提交的進程的父 ID(PPID)為1(init 進程的 PID),並不是當前終端的進程 ID。因此並不屬於當前終端的子進程,從而也就不會受到當前終端的 HUP 信號的影響了。
3. setsid(新開子進程)
nohup 無疑能通過忽略 HUP 信號來使我們的進程避免中途被中斷,但如果我們換個角度思考,如果我們的進程不屬於接受 HUP 信號的終端的子進程,那么自然也就不會受到 HUP 信號的影響了。setsid 就能幫助我們做到這一點。
setsid 示例
[root@pvcent107 ~]# setsid ping www.ibm.com
[root@pvcent107 ~]# 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
[root@pvcent107 ~]#
