Linux需要掌握的知識(一)

1 數據流重定向
重定向有5種方式,分別是: 輸出重定向、輸入重定向、錯誤重定向、追加重定向以及同時實現輸出和錯誤的重定向。

重定向就是使用文件代替標準輸入、標準輸出和標準錯誤輸出。

標準輸入 (stdin)      :代碼爲 0 ,使用 < 或 << ;

標準輸出 (stdout)    :代碼爲 1 ,使用 > 或 >> ;

標準錯誤輸出(stderr):代碼爲 2 ,使用 2> 或 2>> ;

其中,有一個箭頭的表示以覆蓋的方式重定向,而有兩個箭頭的表示以追加的方式重定向。

可以將不需要的標準輸出以及標準錯誤輸出重定向到 /dev/null ,相當於扔進垃圾箱。

如果需要將標準輸出以及標準錯誤輸出同時重定向到一個文件,需要將某個輸出轉換爲另一個輸出,例如 2>&1 表示將標準錯誤輸出轉換爲標準輸出。
具體解釋可參考https://blog.csdn.net/qq_28584889/article/details/88728164?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

路徑和命令的執行

 以絕對或相對路徑來執行指令,例如 /bin/ls 或者 ./ls ; 新手易忽視

靜態鏈接庫和動態鏈接庫的區別

靜態連接庫就是把(lib)文件中用到的函數代碼直接鏈接進目標程序,程序運行的時候不再需要其它的庫文件;動態鏈接就是把調用的函數所在文件模塊(DLL)和調用函數在文件中的位置等信息鏈接進目標程序,程序運行的時候再從DLL中尋找相應函數代碼,因此需要相應DLL文件的支持。

靜態鏈接庫與動態鏈接庫都是共享代碼的方式,如果採用靜態鏈接庫,則無論你願不願意,lib 中的指令都全部被直接包含在最終生成的 EXE 文件中了。但是若使用 DLL,該 DLL 不必被包含在最終 EXE 文件中,EXE 文件執行時可以“動態”地引用和卸載這個與 EXE 獨立的 DLL 文件。靜態鏈接庫和動態鏈接庫的另外一個區別在於靜態鏈接庫中不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接庫。動態庫就是在需要調用其中的函數時,根據函數映射表找到該函數然後調入堆棧執行。如果在當前工程中有多處對dll文件中同一個函數的調用,那麼執行時,這個函數只會留下一份拷貝。但是如果有多處對lib文件中同一個函數的調用,那麼執行時,該函數將在當前程序的執行空間裏留下多份拷貝,而且是一處調用就產生一份拷貝。

4 孤兒進程和僵死進程
孤兒進程

一個父進程退出,而它的一個或多個子進程還在運行,那麼那些子進程將成爲孤兒進程。孤兒進程將被 init 進程(進程號爲 1)所收養,並由 init 進程對它們完成狀態收集工作。由於孤兒進程會被 init 進程收養,所以孤兒進程不會對系統造成危害。

殭屍進程

一個子進程的進程描述符在子進程退出時不會釋放,只有當父進程通過 wait 或 waitpid 獲取了子進程信息後纔會釋放。如果子進程退出,而父進程並沒有調用 wait 或 waitpid,那麼子進程的進程描述符仍然保存在系統中,這種進程稱之爲僵死進程。

僵死進程通過 ps 命令顯示出來的狀態爲 Z。

系統所能使用的進程號是有限的,如果大量的產生僵死進程,將因爲沒有可用的進程號而導致系統不能產生新的進程。

要消滅系統中大量的僵死進程,只需要將其父進程殺死,此時所有的僵死進程就會變成孤兒進程,從而被 init 所收養,這樣 init 就會釋放所有的僵死進程所佔有的資源,從而結束僵死進程。

5 PS命令

Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要動態的顯示進程信息,就可以使用top命令

要對進程進行監測和控制,首先必須要瞭解當前進程的情況,也就是需要查看當前進程,而 ps 命令就是最基本同時也是非常強大的進程查看命令。使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程佔用了過多的資源等等。總之大部分信息都是可以通過執行該命令得到的。

ps 爲我們提供了進程的一次性的查看,它所提供的查看結果並不動態連續的;如果想對進程時間監控,應該用 top 工具。

kill 命令用於殺死進程。

linux上進程有5種狀態: 

1. 運行(正在運行或在運行隊列中等待) 

2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號) 

3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷髮生) 

4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放) 

5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行運行)

詳細使用說明參考:https://www.cnblogs.com/peida/archive/2012/12/19/2824418.html

參考原文鏈接:https://blog.csdn.net/hebtu666/article/details/104048804

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章