新聞中心
Linux多線程技術(shù)為并發(fā)編程提供了強(qiáng)大支持能力,但在實(shí)際應(yīng)用過(guò)程中,由于多線程間的交互較為復(fù)雜,很容易導(dǎo)致程序的不穩(wěn)定性。查看多線程狀態(tài)成為了程序員調(diào)試的重要一環(huán)。本文將介紹Linux操作系統(tǒng)下多線程狀態(tài)查看技巧,幫助讀者解決多線程運(yùn)行中遇到的問(wèn)題。

10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有江山免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1.進(jìn)程和線程
我們要搞清楚進(jìn)程和線程的概念。在操作系統(tǒng)中,一個(gè)運(yùn)行中的程序稱為進(jìn)程,而進(jìn)程中的每個(gè)執(zhí)行流程都成為線程。
多個(gè)線程在同一進(jìn)程之內(nèi)運(yùn)行。每個(gè)線程都擁有自己的寄存器和線程棧,并且與其他線程共享同一進(jìn)程的數(shù)據(jù)區(qū)、堆和代碼段等。線程間的切換比進(jìn)程間的切換更為快速和容易。
2.查看線程狀態(tài)
在Linux系統(tǒng)下,我們可以通過(guò)下面兩條命令來(lái)查看多線程的狀態(tài):
ps -eLf
top
其中,ps命令可以列出當(dāng)前主機(jī)上所有進(jìn)程的狀態(tài)。第二個(gè)參數(shù)是進(jìn)程ID,如果省略,則表示查看當(dāng)前用戶的所有進(jìn)程。選項(xiàng)e指定查看所有進(jìn)程,L表示查看進(jìn)程的線程。
執(zhí)行命令后,我們可以看到一大串細(xì)節(jié),它們分別代表每個(gè)線程的狀態(tài)。一般來(lái)說(shuō),由多線程程序創(chuàng)建的線程PID的名字后面會(huì)帶有很多LWP(Light Weight Process輕量級(jí)進(jìn)程),每個(gè)LWP對(duì)應(yīng)一個(gè)線程,我們可以根據(jù)LWP的ID號(hào)查詢對(duì)應(yīng)線程的信息。
另外,top命令可以實(shí)時(shí)監(jiān)控系統(tǒng)中運(yùn)行的進(jìn)程和進(jìn)程間的交互情況,是一款非常強(qiáng)大的進(jìn)程管理工具。在命令窗口中執(zhí)行該命令,我們可以觀察到各列對(duì)應(yīng)的含義:
PID:進(jìn)程的ID號(hào)
PPID:父進(jìn)程的ID號(hào)
USER:進(jìn)程的所有者
NI:進(jìn)程的優(yōu)先級(jí)
%CPU:CPU占用率
%MEM:內(nèi)存占用率
COMMAND:進(jìn)程的命令
另外,輸入H命令可以查看線程信息,SHIFT+H可以查看線程的CPU占用情況。
3.查看線程堆棧
在進(jìn)行多線程程序調(diào)試時(shí),可能會(huì)碰到線程阻塞、死鎖等問(wèn)題,這時(shí)我們需要查看線程堆棧,以幫助解決問(wèn)題。在Linux系統(tǒng)中,我們可以使用gdb工具來(lái)查看線程堆棧。
我們需要使用-g選項(xiàng)啟動(dòng)程序。例如:
gdb -g a.out
然后,運(yùn)行二進(jìn)制文件,其中N表示線程號(hào),可以使用info threads命令查看當(dāng)前進(jìn)程的線程情況。
r N
然后,在gdb命令行窗口中輸入thread apply all bt命令,查看每個(gè)線程的堆棧信息。apply all參數(shù)表示對(duì)所有線程進(jìn)行查看,bt命令表示查看線程的堆棧。
這種方式的缺點(diǎn)在于,當(dāng)線程數(shù)較多時(shí)需要大量的輸入,比較麻煩。有一種更有效的方式是在代碼中添加堆棧打印語(yǔ)句。在需要查看堆棧的位置加入以下代碼:
#include
#include
#include
#include
#include
#include
#define TRACE_MAX_STACK_FRAMES 50
void print_trace (int signum)
{
fprintf(stderr, “Error: signal %d:\n”, signum);
void *trace[TRACE_MAX_STACK_FRAMES];
int trace_size = backtrace(trace, TRACE_MAX_STACK_FRAMES);
char **messages = backtrace_symbols(trace, trace_size);
for (int i = 0; i
fprintf(stderr, “%d: %s\n”, i, messages[i]);
}
free(messages);
exit(1);
}
void *task1(void *arg) {
signal(SIGSEGV, print_trace);
…
}
4.其他注意事項(xiàng)
在編寫(xiě)多線程程序時(shí),還需要注意以下事項(xiàng),以提高程序的穩(wěn)定性:
避免競(jìng)爭(zhēng)情況:在多線程程序中,線程間的共享數(shù)據(jù)可能會(huì)導(dǎo)致競(jìng)爭(zhēng)情況,導(dǎo)致程序的不穩(wěn)定性。因此,在編寫(xiě)程序時(shí),需要使用線程同步機(jī)制避免競(jìng)爭(zhēng)情況的發(fā)生。
正確設(shè)置優(yōu)先級(jí):在多線程程序中,不同線程的執(zhí)行順序可能會(huì)對(duì)程序的正確性產(chǎn)生影響。對(duì)于一些較為關(guān)鍵的任務(wù),程序員需要設(shè)置較高的優(yōu)先級(jí)來(lái)保證它們的及時(shí)執(zhí)行。
正確的線程數(shù)目:這項(xiàng)要求的關(guān)鍵是要把握好線程數(shù)的細(xì)度。如果線程數(shù)過(guò)多,在上下文的切換中會(huì)花費(fèi)大量的時(shí)間,降低程序的效率。如果線程數(shù)過(guò)少,則不能很好地利用多核心CPU的性能,進(jìn)而影響程序執(zhí)行效率。實(shí)際的線程數(shù)應(yīng)該根據(jù)實(shí)際情況進(jìn)行動(dòng)態(tài)調(diào)優(yōu)。
相關(guān)問(wèn)題拓展閱讀:
- Linux多線程編程
- kill-3生成的線程堆棧怎么查看
Linux多線程編程
編譯時(shí)要用到pthread 庫(kù):gcc -lpthread
錯(cuò)誤碼位置:/usr/include/a-generic/errno.h
gcc pthread_create.c -lpthread
思考:主子線程交替打印奇數(shù)偶數(shù)。
思考:證明線程可以自己取消自己。
思考:證明SIGKILL和SIGSTOP 是無(wú)法阻塞的。
/usr/include/bits/pthreadtypes.h中查看pthread_mutex_t
思考:用多線程將一個(gè)文件1.c拷貝3個(gè)副本,11.c,12.c,13.c
思考:多個(gè)生產(chǎn)者和消費(fèi)者
思考:將互斥量等初始化使用pthread_once實(shí)現(xiàn)。
思考:設(shè)置線程的分離屬性,然后在新縣城中獲取自己的分離屬性。
kill-3生成的線程堆棧怎么查看
之一步:在終端運(yùn)行Java程序
第二步:通過(guò)命令 pidof java 找到已經(jīng)啟動(dòng)的java進(jìn)程的ID,選擇需要查看的java程序的進(jìn)程ID
第三步:使用命令 kill -3 打印出java程序的線程堆棧信息
第四步:通常情況下運(yùn)行的項(xiàng)目可和賣迅能會(huì)比較大,那么這個(gè)時(shí)候打印的堆棧信息可能會(huì)有幾千到幾萬(wàn)行,為了方便查看,我們往往需要將輸出內(nèi)容進(jìn)行重定向
使用linux下的重定向命令方式即可:例如: demo.sh > run.log 2>&1 將輸出信息重定向到 run.log中。
注:在操作系統(tǒng)中,0 1 2分別對(duì)應(yīng)著不同的含義, 如下:
0 : 標(biāo)準(zhǔn)輸入,即:C中的stdin , java中的System.in
1 : 標(biāo)準(zhǔn)輸出, 即:C中的stdout ,java中的配正System.out
2 : 錯(cuò)誤輸出, 即:C中的stderr , java中的System.err
Demo:
Sources Code :
public class PrintThreadTrace {
Object obj1 = new Object();
Object obj2 = new Object();
public void func1(){
synchronized (obj1){
func2();
}
}
public void func2(){
synchronized (obj2){
while(true){
System.out.print(“”);
}
}
}
public static void main(String args){
PrintThreadTrace ptt = new PrintThreadTrace();
ptt.func1();
}
}
按照步驟操作后喚此的打印輸出信息:
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode):
“Service Thread” daemon prio=10 tid=0x00007fdc880a9000 nid=0x12a4 runnable
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread1” daemon prio=10 tid=0x00007fdc880a7000 nid=0x12a3 waiting on condition
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread0” daemon prio=10 tid=0x00007fdc880a4000 nid=0x12a2 waiting on condition
java.lang.Thread.State: RUNNABLE
“JDWP Command Reader” daemon prio=10 tid=0x00007fdcnid=0x1299 runnable
java.lang.Thread.State: RUNNABLE
“JDWP Event Helper Thread” daemon prio=10 tid=0x00007fdc880a1800 nid=0x1298 runnable
java.lang.Thread.State: RUNNABLE
“JDWP Transport Listener: dt_socket” daemon prio=10 tid=0x00007fdc8809e000 nid=0x1297 runnable
java.lang.Thread.State: RUNNABLE
“Signal Dispatcher” daemon prio=10 tid=0x00007fdcnid=0x1296 waiting on condition
java.lang.Thread.State: RUNNABLE
“Finalizer” daemon prio=10 tid=0x00007fdcnid=0x1295 in Object.wait()
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
– waiting on (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
– locked (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
“Reference Handler” daemon prio=10 tid=0x00007fdc8806f800 nid=0x1294 in Object.wait()
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
– waiting on (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
– locked (a java.lang.ref.Reference$Lock)
“main” prio=10 tid=0x00007fdc8800b800 nid=0x128e runnable
java.lang.Thread.State: RUNNABLE
at com.wenchain.study.PrintThreadTrace.func2(PrintThreadTrace.java:20)
– locked (a java.lang.Object)
at com.wenchain.study.PrintThreadTrace.func1(PrintThreadTrace.java:13)
– locked (a java.lang.Object)
at com.wenchain.study.PrintThreadTrace.main(PrintThreadTrace.java:27)
“VM Thread” prio=10 tid=0x00007fdc8806b000 nid=0x1293 runnable
“GC task thread#0 (ParallelGC)” prio=10 tid=0x00007fdcnid=0x128f runnable
“GC task thread#1 (ParallelGC)” prio=10 tid=0x00007fdcnid=0x1290 runnable
“GC task thread#2 (ParallelGC)” prio=10 tid=0x00007fdcnid=0x1291 runnable
“GC task thread#3 (ParallelGC)” prio=10 tid=0x00007fdcnid=0x1292 runnable
“VM Periodic Task Thread” prio=10 tid=0x00007fdc880b3800 nid=0x12a5 waiting on condition
JNI global references: 1391
Heap
PSYoungGen total 17920K, used 1270K
eden space 15872K, 8% used
from space 2023K, 0% used
to space 2023K, 0% used
ParOldGentotal 39424K, used 0K
object space 39424K, 0% used
PSPermGentotal 21504K, used 2619K
object space 21504K, 12% used
上面的信息中包含了當(dāng)前JVM中所有運(yùn)行的線程信息,其中在示例中我們啟動(dòng)的線程為main線程,其余的都是JVM自己創(chuàng)建的。
在打印的信息中,我們可以清楚的看見(jiàn)當(dāng)前線程的調(diào)用上下文,可以很清楚的知道程序的運(yùn)行情況。
并且我們?cè)谧詈竺孢€能看見(jiàn)當(dāng)前虛擬機(jī)中的內(nèi)存使用情況,青年世代,老年世代的信息等等…
PS: 在JDK1.5以上,我們可以通過(guò)在Java程序中調(diào)用Thread.getStackTrace()方法來(lái)進(jìn)行堆棧的自動(dòng)打印,使得線程堆棧的打印時(shí)機(jī)可編程控制。
文章知識(shí)點(diǎn)與官方知識(shí)檔案匹配
Java技能樹(shù)首頁(yè)概覽
89841 人正在系統(tǒng)學(xué)習(xí)中
點(diǎn)擊閱讀全文
打開(kāi)CSDN,閱讀體驗(yàn)更佳
jstack-查看Java進(jìn)程的線程堆棧信息,鎖定高消耗資源代碼
jstack主要用來(lái)查看某個(gè)Java進(jìn)程內(nèi)的線程堆棧信息。語(yǔ)法格式如下: jstackpid jstackexecutable core jstackremote-hostname-or-ip 命令行參數(shù)選項(xiàng)說(shuō)明如下: …
011Java并發(fā)包018查看線程堆棧信息_執(zhí)筆未來(lái)的博客
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) java.util.concurre…
最新發(fā)布 jstack — java堆棧常用排查指令
jstack — java堆棧常用排查指令
繼續(xù)訪問(wèn)
熱門推薦 jstack 命令查看JAVA線程堆棧
JAVA堆棧信息實(shí)際生產(chǎn)中,可能由于開(kāi)發(fā)以及測(cè)試未能全面覆蓋的代碼質(zhì)量、性能問(wèn)題,而引致線程掛起甚至崩潰??赡芫托枰榭炊褩P畔?lái)排查問(wèn)題了。jps -lvmjps -lvm 用于查看當(dāng)前機(jī)器上運(yùn)行的java進(jìn)程。C:\Users\Administrator>jps -lvmDosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.defa
繼續(xù)訪問(wèn)
Java多線程——查看線程堆棧信息
Java多線程——查看線程堆棧信息 摘要:本文主要介紹了查看線程堆棧信息的方法。 使用Thread類的getAllStackTraces()方法 方法定義 可以看到getAllStackTraces()方法的返回值是一個(gè)Map對(duì)象,key是Thread的實(shí)例,value是一個(gè)StackTraceElement實(shí)例數(shù)組: 1 public static Map的線程CPU類似 1、支持一鍵展示當(dāng)前最忙的前N個(gè)線程并打印堆棧 thread -n 3 沒(méi)有線程ID,包含表示為JVM內(nèi)部線程,參考dashboard命令的介紹。 cpuUsage為采樣間隔時(shí)間內(nèi)線程的CPU使用率,與dashboard命令的數(shù)據(jù)一致。 deltaTime為采樣間隔時(shí)間內(nèi)線程的增量CPU時(shí)間,小于1ms時(shí)被取整顯示為0ms。 time線程運(yùn)行總CPU…
繼續(xù)訪問(wèn)
java查看線程的堆棧信息
通過(guò)使用jps 命令獲取需要監(jiān)控的進(jìn)程的pid,然后使用jstackpid 命令查看線程的堆棧信息。 通過(guò)jstack命令可以獲取當(dāng)前進(jìn)程的所有線程信息。 每個(gè)線程堆中信息中,都可以查看到線程ID、線程的狀態(tài)(wait、sleep、running 等狀態(tài))、是否持有鎖信息等。 jstack -l >jvm_listlocks.txt 轉(zhuǎn)…
繼續(xù)訪問(wèn)
java 查看線程堆棧信息_Java多線程——查看線程堆棧信息
java多線程——查看線程堆棧信息摘要:本文主要介紹了查看線程堆棧信息的方法。使用thread類的getallstacktraces()方法方法定義可以看到getallstacktraces()方法的返回值是一個(gè)map對(duì)象,key是thread的實(shí)例,value是一個(gè)stacktraceelement實(shí)例數(shù)組:1 public static map getallstacktraces()使用可以使…
繼續(xù)訪問(wèn)
java線程堆棧信息分析
java堆棧信息分析
繼續(xù)訪問(wèn)
java 查看堆棧_javap 命令查看堆棧中信息
javap命令是對(duì).java文件進(jìn)行反編譯,通過(guò)這個(gè)命令可以看到堆棧中是怎么壓棧和出棧的已經(jīng)執(zhí)行順序,這里簡(jiǎn)單解釋下javap的簡(jiǎn)單的使用,下面舉個(gè)例子:題目:i++ 和++i的區(qū)別解釋:簡(jiǎn)單點(diǎn)說(shuō) 這個(gè)問(wèn)題都不難回答,這里就不說(shuō)了,但是實(shí)際上堆棧中區(qū)別也是老大了(這里就用到了javap命令), 步驟:1.在任意一個(gè)盤下面建一個(gè)名為Test.java的文件(文件名可以隨意命名)代碼如下:public…
繼續(xù)訪問(wèn)
java 查看線程堆棧信息_jstack-查看Java進(jìn)程的線程堆棧信息,鎖定高消耗資源代碼?!?/p>
jstack主要用來(lái)查看某個(gè)Java進(jìn)程內(nèi)的線程堆棧信息。語(yǔ)法格式如下:jstackpidjstackexecutablecorejstackremote-hostname-or-ip命令行參數(shù)選項(xiàng)說(shuō)明如下:-llonglistings,會(huì)打印出額外的鎖信息,在發(fā)生死鎖時(shí)可以用jstack-lpid來(lái)觀察…
繼續(xù)訪問(wèn)
java堆棧信息怎么看_線程堆棧信息怎么看? – cs_person的個(gè)人空間 – OSCHINA – 中文開(kāi)源技術(shù)交流社區(qū)…
一條線程堆棧信息大概長(zhǎng)成下面這個(gè)樣子:RMI TCP Connection(267865)-172.16.5.25″ daemon prio=10 tid=0x00007fdnid=0x55ae waiting for monitor entry java.lang.Thread.State: BLOCKED (on object m…
繼續(xù)訪問(wèn)
線程堆棧信息怎么看?
一條線程堆棧信息大概長(zhǎng)成下面這個(gè)樣子: RMI TCP Connection(267865)-172.16.5.25″ daemon prio=10 tid=0x00007fdnid=0x55ae waiting for monitor entry
繼續(xù)訪問(wèn)
java的棧和堆
棧與堆都是Java用來(lái)在Ram中存放數(shù)據(jù)的地方。與C++不同,Java自動(dòng)管理?xiàng):投?,程序員不能直接地設(shè)置?;蚨?。 Java 的堆是一個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū),類的(對(duì)象從中分配空間。這些對(duì)象通過(guò)new、newarray、anewarray和multianewarray等指令建立,它們不需要程序代碼來(lái)顯式的釋放。堆是由垃圾回收來(lái)負(fù)責(zé)的,堆的優(yōu)勢(shì)是可以動(dòng)態(tài)地分配內(nèi)存大小,生存期也不必事先告訴編譯器,因?yàn)樗窃凇?/p>
繼續(xù)訪問(wèn)
查看java線程_【JAVA】Java線程堆棧信息查看
如何獲得線程的堆棧信息?線上服務(wù)器cpu 100%了,該如何排查問(wèn)題?1.top命令查詢哪個(gè)pid進(jìn)程占用cpu高(ps -ef|grep java 獲取PID號(hào))2.通過(guò) top -Hp pid 可以查看該進(jìn)程下各個(gè)線程的cpu使用情況,獲取占用cpu高的線程id3.執(zhí)行命令:printf “%X\n” 線程tid(用于獲取占用cpu高的線程id的16進(jìn)制數(shù))4.執(zhí)行命令:jstack pid …
繼續(xù)訪問(wèn)
kill -3 java_kill -3 PID命令獲取java應(yīng)用堆棧信息
一、應(yīng)用場(chǎng)景:當(dāng)linux服務(wù)器出現(xiàn)異常情況(響應(yīng)緩慢,負(fù)載持續(xù)飆升)并且服務(wù)器沒(méi)有安裝對(duì)應(yīng)的包而無(wú)法使用jstack等命令時(shí),可以使用linux的kill相關(guān)命令打印堆棧信息。命令格式:kill -3 PID二、執(zhí)行步驟:2.1、獲取java進(jìn)程的PIDps -ef|grep java結(jié)果的第二列數(shù)字就是進(jìn)程對(duì)應(yīng)的pid。2.2、kill -3 PID(1)如果項(xiàng)目通過(guò)Tomcat進(jìn)行發(fā)布(普通…
繼續(xù)訪問(wèn)
jstack 工具 查看JVM堆棧信息
1|0介紹 jstack是java虛擬機(jī)自帶的一種堆棧跟蹤工具。jstack用于打印出給定的java進(jìn)程ID或corefile或遠(yuǎn)程調(diào)試服務(wù)的Java堆棧信息,如果是在64位機(jī)器上,需要指定選項(xiàng)”-J-d64″,Windows的jstack使用方式只支持以下的這種方式: jstack pid 主要分為兩個(gè)功能: a. 針對(duì)活著的進(jìn)程做本地的或遠(yuǎn)程的線程dump; b. 針對(duì)core文件做線程dump。 jstack用于生成java虛擬機(jī)當(dāng)前時(shí)刻的線程快照。線程快照是…
繼續(xù)訪問(wèn)
linux查看java堆棧
1、查看JAVA進(jìn)程JVM參數(shù) jinfo -flags pid(進(jìn)程號(hào)) -XX:CICompilerCount=2 更大的并行編譯數(shù) -XX:InitialHeapSize=JVM 的初始堆內(nèi)存大小 -XX:MaxHeapSize=JVM 的更大堆內(nèi)存大小 -XX:MaxNewSize=XX:MinHeapDeltaBytes=XX:NewSize=XX:OldSize=、JVM 查看.
繼續(xù)訪問(wèn)
Linux 如何查看一個(gè)進(jìn)程的堆棧
有兩種方法:之一種:pstack 進(jìn)程ID第二種,使用gdb 然后attach 進(jìn)程ID,然后再使用命令 thread apply all bt 兩種方法都可以列出進(jìn)程所有的線程的當(dāng)前的調(diào)用棧。不過(guò),使用gdb的方法,還可以查看某些信息,例如局部變量,指針等。不過(guò),如果只看調(diào)用棧的話,pstack還是很方便的。
繼續(xù)訪問(wèn)
JAVA獲取堆棧信息
1. 通過(guò)Throwable獲取 StackTraceElement stackTrace = new Throwable().getStackTrace(); 2. 通過(guò)Thread獲取 StackTraceElement stackTrace = Thread.currentThread().getStackTrace();
繼續(xù)訪問(wèn)
java 查看線程棧大小_基于 Java 線程棧的問(wèn)題排查
關(guān)于linux 查看多線程狀態(tài)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站營(yíng)銷推廣找創(chuàng)新互聯(lián),全國(guó)分站站群網(wǎng)站搭建更好做SEO營(yíng)銷。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎(chǔ)服務(wù)商,價(jià)格厚道。提供成都服務(wù)器托管租用、綿陽(yáng)服務(wù)器租用托管、重慶服務(wù)器托管租用、貴陽(yáng)服務(wù)器機(jī)房服務(wù)器托管租用。
網(wǎng)站名稱:深入了解Linux多線程狀態(tài)查看技巧 (linux 查看多線程狀態(tài))
文章轉(zhuǎn)載:http://www.fisionsoft.com.cn/article/ccsesgj.html


咨詢
建站咨詢
