今天我們就來介紹一下Linux 進(jìn)程有哪些方法的信息。ps檢查進(jìn)程ID,查看該進(jìn)程是否仍然存在以及進(jìn)程狀態(tài)。如果是這樣,則strace和psstack查看進(jìn)程的當(dāng)前信息是否卡在了哪個(gè)位置,比較每幀的最后一次調(diào)用信息以查找異常點(diǎn),例如該進(jìn)程不在corefile文件中,檢查 corefile的信息直接在gdb上。 當(dāng)其他無法治愈進(jìn)程狀態(tài)的信息時(shí),請(qǐng)查看/proc/pid下的過程狀態(tài)信息。
1、strace
trace system calls and signals 跟蹤進(jìn)程內(nèi)部的系統(tǒng)調(diào)用和信號(hào)
什么是系統(tǒng)調(diào)用?系統(tǒng)調(diào)用,指運(yùn)行在「用戶態(tài)」的程序向操作系統(tǒng)「內(nèi)核態(tài)」請(qǐng)求需要更高權(quán)限運(yùn)行的服務(wù),系統(tǒng)調(diào)用提供用戶程序與操作系統(tǒng)之間的接口。
strace后面跟著啟動(dòng)一個(gè)進(jìn)程,可以跟蹤啟動(dòng)后進(jìn)程的系統(tǒng)調(diào)用和信號(hào),這個(gè)命令可以看到進(jìn)程執(zhí)行時(shí)候都調(diào)用了哪些系統(tǒng)調(diào)用,通過指定不同的選項(xiàng)可以輸出系統(tǒng)調(diào)用發(fā)生的時(shí)間,精度可以精確到微秒,甚至還可以統(tǒng)計(jì)分析系統(tǒng)「調(diào)用的耗時(shí)」,這在排查進(jìn)程假死問題的時(shí)候很有用,能幫你發(fā)現(xiàn)進(jìn)程卡在哪個(gè)系統(tǒng)調(diào)用上。已經(jīng)在運(yùn)行的進(jìn)程也可以指定-p參數(shù)加pid像gdb attach那樣附著上去跟蹤。
2、pstack
print a stack trace of a running process 打印出運(yùn)行中程序的堆棧信息。
執(zhí)行命令pstack pid 你能看到當(dāng)前線程運(yùn)行中的堆棧信息,其中的pid可用之前的ps命令獲得,pstack可以看到進(jìn)程內(nèi)啟動(dòng)的線程號(hào),每個(gè)進(jìn)程內(nèi)線程的「堆棧」內(nèi)容也能看到。
3、pstree
display a tree of processes pstree按樹形結(jié)構(gòu)打印運(yùn)行中進(jìn)程結(jié)構(gòu)信息,可以直觀的查看進(jìn)程和它啟動(dòng)的線程的關(guān)系,并能顯示進(jìn)程標(biāo)識(shí)。
4、gdb
gdb是GNU開發(fā)的gcc套件中Linux下程序調(diào)試工具,你可以查看程序的堆棧、設(shè)置斷點(diǎn)、打印程序運(yùn)行時(shí)信息,甚至還能調(diào)試多線程程序,功能十分強(qiáng)大。在這里把gdb當(dāng)成一個(gè)命令來講有點(diǎn)大材小用。
要用gdb調(diào)試C/C++程序首先編譯的時(shí)候要加-g選項(xiàng),g++ -g test.cpp -o test這樣生成的程序就可以用gdb來調(diào)試?yán)病?/p>
可以直接用gdb啟動(dòng)程序調(diào)試,命令:gdb prog
用gdb附著到一個(gè)已經(jīng)啟動(dòng)的進(jìn)程上調(diào)試也可以。命令:gdb prog pid
程序崩潰之后參數(shù)corefile也可以用gdb調(diào)試,看看程序死掉之前留了什么遺言(堆棧信息)給你。命令:gdb prog corefile,這里有一點(diǎn)需要注意,有些Linux
系統(tǒng)默認(rèn)程序崩潰不生成corefile,這時(shí)你需要ulimit -cunlimited這樣就能生成corefile了。
以上就是關(guān)于Linux 進(jìn)程有哪些方法的全部內(nèi)容介紹,想了解更多關(guān)于Linux 的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。