【Linux】 linux的进程系统一点补充
linux進程系統
■ 程序 vs. 進程
程序靜態地存放在磁盤中。用戶可以觸發執行程序,被觸發后的程序就存進內存中成為一個個體,即為進程。
有些進程(比如crond需要每分鐘都掃描、守護進程等等)是常駐在內存中的
■ 父與子
用父進程提供的接口執行新程序就生成了子進程。具體過程是父進程先fork()復制一個pid和自身不同,ppid和自身pid相同的進程,然后再把子進程的代碼用exec()加載進該新進程的程序塊部分,從而生成了一個子進程。
?
■ 工作管理(job control)
● 工作
一個job本身就是一個由bash開啟的子進程。把它叫做job是因為需要把它納入一個工作管理的體系中來進行管理。job在jobcontrol的體系中有一個單獨的標號以及狀態字段。標號用于指明是那個job,而狀態有Running,Killed,Done等等用于指明job的狀態。
● 終端和虛擬終端
首先來搞清楚終端和虛擬終端的區別(tty和pts)。linux字符界面上,默認是有多個終端可以切換的,從tty0到tty6,用alt+F1~F7來切換終端屏幕。每個終端可以登入不同的用戶,執行不同的命令而互相不影響。通過telnet,ssh等連接上linux系統后的操作界面則是一個虛擬終端,叫pts。pts沒有個數限制,從pts0開始編號
一般來說在某一個時刻在一個終端上,能和用戶進行交互的進程最多只有一個。如果想在一個終端上進行多個進程的綜合管理,就需要job control。同時這也說明了,job control這個概念是面向一個終端而言的。討論跨終端的工作管理沒有意義。不同的終端擁有各自獨立的工作管理體系,即使連入用戶相同。
● jobs
用于查看當前所有工作的狀態(主要是后臺運行中的工作)。job分成前臺和后臺,前臺job和后臺job的主要區別是是否占用當前終端的stdin。一個前臺job會在結束之前占用掉stdin讓用戶無法繼續輸入,一個后臺job則會讓出stdin讓用戶可以輸入信息。jobs命令可以加上參數-p(只顯示各個job的pid)和-l(顯示各個job的詳細信息)
● <cmd> &
其實是關于&的作用,其意思是把某個進程(由cmd命令執行的進程)放到后臺運行,前臺就可以切換回普通的輸入模式了。需要注意的一個坑是:在鍵入&之后命令行返回的類似于"[1] 2472 xxxx"的東西并不屬于子進程stdout的一部分。所以即使在腳本中寫了獲取一個job或者說是一個子進程的stdout,那里面也是沒有這段信息的。另外,把job放到后臺只是說把stdin給讓出來了,并沒有說stdout和stderr也會被隱去,所以當子進程的stdout有輸出的時候還是會反饋到父進程中的界面上來的。
●? nohup
nohup的功能,用官方點的中文來說是脫機管理。相當于把進程的stdout和stderr重定向到當前目錄下的nohup.out文件中(如果寫入失敗的話就重定向到$HOME/nohup.out中)。簡單地說,nohup和<cmd> >output 2>&1 的功能基本上是一樣的。但nohup比普通的重定向更NB的地方在于其可以無視所有SIGNUP信號。最明顯的一個例子就是,用nohup開啟的進程不會隨終端被關閉而被掛起,而普通重定向開的進程會。所以一般要開啟一個服務或者守護進程之類的東西的話肯定是要用nohup的。
把nohup和&結合起來用,前者把stdout重定向到文件,后者把進程放到后臺,讓出stdin。這么一來就可以使得進程得到真正意義上的后臺運行了(開啟進程之后用戶可以繼續在命令行操作,且進程的輸出被導入到文件里所以用戶也不會被其輸出的信息打擾到)
除了默認的nohup.out作為輸出文件,nohup后面也可以跟上重定向的那些命令來自定義輸出的文件,比如 nohup <cmd> > output.file 2>&1就可以把所有信息都輸出到output.file而不是nohup.out里面了。
● fg %(n)
n是某個job的編號,這條命令的作用是把某個工作拉回前臺處理(fg是foreground的簡略,拉回前臺的意思是只重新讓其占據stdin)
● bg%(n)
讓某個后臺中,狀態為Stopped的job變為Running。相當于在后臺中激活某個任務
● ctrl-z
在某個前臺job正在運行時按下,可以讓當前job狀態變為Stopped并丟進后臺。
● kill -signal %(n)
這個和進程的kill是一個意思,只不過這里確定一個進程的方法不是pid而是該進程對應的job的編號。關于signal的常用選擇有: -1是指重新讀取一次參數 -9是強制殺掉 -15是讓它正常結束
?
轉載于:https://www.cnblogs.com/franknihao/p/6668308.html
總結
以上是生活随笔為你收集整理的【Linux】 linux的进程系统一点补充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis使用动态代理报 inval
- 下一篇: linux 其他常用命令