Linux命令整理
-
根據(jù)程序名稱查詢進程ID
ps -ef|grep 進程名
ps -ef|grep nginx ########## out ########### 501 5313 2523 0 11:56上午 ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox nginx
-
根據(jù)端口號查找相應的進程號 (必須以root用戶執(zhí)行)
netstat -anp | grep 8080
-
查看TCP網(wǎng)絡連接情況?
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' ########## out ########### LAST_ACK 5 SYN_RECV 30 ESTABLISHED 15 FIN_WAIT1 51 FIN_WAIT2 5 TIME_WAIT 10
Linux下查看TCP網(wǎng)絡連接情況
-
殺死 進程id 為 12664 的進程
taskkill /pid 12664 /f
-
僵尸進程產(chǎn)生的原因?
每個進程在進程表里都有一個進入點(entry),核心程序執(zhí)行該進程時使用到的一切信息都存儲在進入點。當用 ps 命令查看系統(tǒng)中的進程信息時,看到的就是進程表中的相關數(shù)據(jù)。所以,當一個父進程以 fork() 系統(tǒng)調(diào)用建立一個子進程后,核心進程就會在進程表中給這個子進程分配一個進入點,然后將相關信息存儲在該進入點所對應的進程表中,這些信息中有一項是其父進程的識別碼。
當這個子進程結(jié)束的時候(比如調(diào)用 exit 命令),其實他并沒有真正的被銷毀,而是留下一個稱為僵尸進程(Zombie)的數(shù)據(jù)結(jié)構(gòu)(系統(tǒng)調(diào)用exit的作用是使進程退出,但是也僅僅限于一個正常的進程變成了一個僵尸進程,并不能完全將其銷毀)。
此時進程表中的數(shù)據(jù)會被該進程的退出碼(exit code)、執(zhí)行時所用的CPU時間等數(shù)據(jù)所取代,這些數(shù)據(jù)會一直保留到系統(tǒng)將它傳遞給它的父進程為止。由此可見,defunct 進程的出現(xiàn)時間是在子進程終止后,但是父進程尚未讀取這些數(shù)據(jù)之前。
此時,該僵尸子進程已經(jīng)放棄了幾乎所有的內(nèi)存空間,沒有任何可執(zhí)行代碼,也不能被調(diào)度,僅僅在進程列表中保留一個位置,記載著該進程的退出狀態(tài)信息供其他進程收集,除此之外,僵尸進程不再占有任何存儲空間。他需要他的父進程來為他收尸,如果他的父進程沒有 SIGCHLD 信號處理函數(shù)調(diào)用 wait() 或 waitpid() 等待子進程結(jié)束,也沒有顯式忽略該信號,那么它就一直保持僵尸狀態(tài)。如果這時候父進程結(jié)束了,那么 init 進程會自動接手這個子進程,為他收尸,他還是能被清除掉的。但如果父進程是一個循環(huán),不會結(jié)束,那么子進程就會一直保持僵尸狀態(tài),這就是系統(tǒng)中為什么有時候會有很多的僵尸進程。
-
僵尸進程如何處理?
【注意】defunct狀態(tài)下的僵尸進程是不能被 kill -9 命令殺掉的,否則就不叫僵尸進程了。
處理方法:
-
重啟
-
通過 ps -ef | grep defunct_process_pid 找到其父進程并殺掉,那么該僵尸進程將自動消失
僵尸進程產(chǎn)生原因和解決方法
-
-
kill 的原理, kill -9 和 kill -15的區(qū)別?
kill 命令默認信號是 SIGTERM(15),當使用 kill -15 時,系統(tǒng)會發(fā)送一個SIGTERM的信號給對應的程序。當程序接收到該信號后,具體要如何處理是自己可以決定的:
-
立即停止程序
-
釋放響應資源后停止程序
-
忽略該信號,繼續(xù)執(zhí)行程序
因為kill -15信號只是通知對應的進程要進行"安全、干凈的退出",程序接到信號之后,退出前一般會進行一些"準備工作",如資源釋放、臨時文件清理等等,如果準備工作做完了,再進行程序的終止。
但是,如果在"準備工作"進行過程中,遇到阻塞或者其他問題導致無法成功,那么應用程序可以選擇忽略該終止信號。
這也就是為什么我們有的時候使用kill命令是沒辦法"殺死"應用的原因。
kill -9 相對強硬一點,系統(tǒng)會發(fā)出 SIGKILL(9)信號,他要求接收到該信號的程序應該立即結(jié)束運行,不能被阻塞或者忽略。
所以,相比于 kill -15 命令,kill -9 在執(zhí)行時,應用程序是沒有時間進行"準備工作"的,所以這通常會帶來一些副作用,數(shù)據(jù)丟失或者終端無法恢復到正常狀態(tài)等。
kill -9 和 kill -15 的區(qū)別
-
-
看磁盤大?。?/span>
df -h
-
Linux 中 shift 的作用?
位置參數(shù)可以用 shift 命令左移。比如 shift 3 表示原來的 $4 現(xiàn)在變成 $1 ,原來的 $5 現(xiàn)在變成 $2 等等,原來的 $1、$2、$3丟棄,$0 不移動。不帶參數(shù)的 shift 命令相當于 shift 1。
Linux命令學習之shift命令
-
排查CPU持續(xù)90%的情況?動畫顯示?
top 命令,動態(tài)顯示系統(tǒng)資源使用情況。
-
查看系統(tǒng)內(nèi)存?
cat /proc/meminfo 命令可以顯示所有關于內(nèi)存使用的信息,比如:
-
可用/閑置物理內(nèi)存數(shù)量
-
等待被寫入緩存的數(shù)量
-
已寫回磁盤的數(shù)量
free 命令是一個用來查看內(nèi)存使用概況的快速簡單的方法,這些信息從 “/proc/meminfo” 獲取。
它提供了一個快照,用于展示總計/閑置的物理內(nèi)存和系統(tǒng)交換區(qū),以及已使用/閑置的內(nèi)核緩沖區(qū)。
-
-
vim 編輯器中如何查找字符串?
命令模式下輸入 “/”,例如查找abc:“/abc”
如果查找下一個,按 “n” 即可
-
如何查看一個大文件的最后一行
tail -n 1 file_name
-
進程 IO 占用高,如何排查?
-
通過 iostat 從系統(tǒng)維度查看 IO 負載情況
-
使用 iotop 從進程緯度查看磁盤 IO 負載情況
-
-
system() 與 exec() 的區(qū)別?
執(zhí)行 exec() 后,老的進程上下文將被 exec() 出來的新的進程上下文覆蓋,新進程代替原進程執(zhí)行。
執(zhí)行 system() 后,相當于 fork() 出一個子進程,并等待此子進程執(zhí)行完畢。
-
樹狀顯示當前文件夾的內(nèi)容?
tree 命令,tree -L 1 -d /test 表示只顯示 /test 下的一層目錄
-
Linux 中反引號、單引號、雙引號的區(qū)別?
-
反引號 在命令中起著命令替換的作用,命令替換是指能夠?qū)⒁粋€命令的標準輸出插在一個命令行中任何位置。
僅在雙引號中起作用。
echo the current directory is `pwd` # 輸出如下: the current directory is /home/cuiyujie
-
單引號
單引號將其中的內(nèi)容都作為字符串處理,忽略所有的命令和特殊字符,只作為普通純文本原樣輸出。
為了保護文本不被轉(zhuǎn)換,除了它本身,就是說除去單引號本身之外,在單引號內(nèi)的所有文本都是原樣輸出。
-
雙引號
雙引號內(nèi)會解析特殊字符,當把文本放在雙引號中,除了 $,\ (反斜杠),和 ‘(倒引號)之外,其他內(nèi)容原樣輸出,即不作解析處理。
這意味著單詞分割,路徑名展開,波浪線展開,和花括號展開都被禁止,然而參數(shù)展開,算術(shù)展開,和命令替換仍然執(zhí)行。
如果要忽略特殊字符,就可以利用 \ 來轉(zhuǎn)義。
-