Untuk Windows, saya pikir Process Explorer menunjukkan kepada Anda semua utas dalam suatu proses.
Apakah ada utilitas baris perintah yang serupa untuk Linux yang dapat menunjukkan kepada saya detail tentang semua utas proses tertentu yang muncul?
Saya pikir saya harus membuat diri saya lebih jelas. Saya tidak ingin melihat hierarki proses, tetapi daftar semua utas yang dihasilkan oleh proses tertentu
Lihat tangkapan layar ini
Bagaimana ini bisa dicapai di Linux? Terima kasih!
Alat klasik top
menunjukkan proses secara default tetapi dapat dikatakan untuk menampilkan utas dengan H
tekan tombol atau -H
opsi baris perintah. Ada juga htop , yang mirip dengan top
tetapi memiliki gulir dan warna; ini menunjukkan semua utas secara default (tapi ini bisa dimatikan). ps
juga memiliki beberapa opsi untuk menampilkan utas, terutama H
dan -L
.
Ada juga alat GUI yang dapat menampilkan informasi tentang utas, misalnya qps (pembungkus GUI sederhana sekitar ps
) atau conky (monitor sistem dengan banyak opsi konfigurasi).
Untuk setiap proses, banyak informasi tersedia di /proc/12345
dimana 12345
adalah ID proses. Informasi tentang setiap utas tersedia di /proc/12345/task/67890
dimana 67890
adalah ID utas kernel. Di sinilah ps
, top
dan alat lainnya mendapatkan informasi mereka.
Saya ingin memperjelas bahwa setiap jawaban di sini memberi Anda apa yang telah Anda tentukan, daftar semua utas yang terkait dengan suatu proses, ini mungkin tidak jelas dalam htop
karena, secara default, daftar semua utas pada sistem, bukan hanya prosesnya tetapi top -H -p <pid>
berfungsi lebih baik misalnya:
top - 00:03:29 up 3 days, 14:49, 5 users, load average: 0.76, 0.33, 0.18
Tasks: 18 total, 0 running, 18 sleeping, 0 stopped, 0 zombie
Cpu(s): 22.6%us, 5.7%sy, 4.2%ni, 66.2%id, 0.8%wa, 0.5%hi, 0.1%si, 0.0%st
Mem: 2063948k total, 1937744k used, 126204k free, 528256k buffers
Swap: 1052220k total, 11628k used, 1040592k free, 539684k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30170 daniel 20 0 371m 140m 107m S 10.0 7.0 0:31.37 source:src
30066 daniel -90 0 371m 140m 107m S 2.0 7.0 0:07.87 clementine
30046 daniel 20 0 371m 140m 107m S 0.0 7.0 0:32.05 clementine
30049 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.03 clementine
30050 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.31 clementine
30051 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30052 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30053 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30054 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.03 clementine
30055 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30056 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30057 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.04 clementine
30058 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30060 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.16 clementine
30061 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30062 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30064 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
30065 daniel 20 0 371m 140m 107m S 0.0 7.0 0:00.00 clementine
Sebagai catatan, utas dengan -90
sebenarnya adalah utas real-time.
Ada juga pilihan lain yang benar CLI ps -e -T | grep <application name or pid>
-e
menunjukkan semua proses-T
mencantumkan semua utas|
mengirimkan output ke perintah selanjutnyagrep
ini memfilter kontenIni sebuah contoh:
$ ps -e -T | grep clementine
PID SPID TTY TIME CMD # this is here for clarity
30046 30046 pts/2 00:00:17 clementine
30046 30049 pts/2 00:00:00 clementine
30046 30050 pts/2 00:00:00 clementine
30046 30051 pts/2 00:00:00 clementine
30046 30052 pts/2 00:00:00 clementine
30046 30053 pts/2 00:00:00 clementine
30046 30054 pts/2 00:00:00 clementine
30046 30055 pts/2 00:00:00 clementine
30046 30056 pts/2 00:00:00 clementine
30046 30057 pts/2 00:00:00 clementine
30046 30058 pts/2 00:00:00 clementine
30046 30060 pts/2 00:00:00 clementine
30046 30061 pts/2 00:00:00 clementine
30046 30062 pts/2 00:00:00 clementine
30046 30064 pts/2 00:00:00 clementine
30046 30065 pts/2 00:00:00 clementine
30046 30066 pts/2 00:00:03 clementine
Masing-masing memiliki PID yang sama sehingga Anda tahu mereka dalam proses yang sama.
htop , versi kutukan atas, memiliki opsi tampilan untuk menampilkan semua utas untuk setiap proses dalam tampilan hierarki. Mulai htop
dan menekan F5 akan menghasilkan:
Anda dapat mencoba menggunakan:
/usr/bin/pstree $PID
Sebagai contoh:
# pstree -p `pidof iceweasel`
iceweasel(3630)─┬─{iceweasel}(3662)
├─{iceweasel}(3663)
├─{iceweasel}(3664)
├─{iceweasel}(3665)
├─{iceweasel}(3666)
├─{iceweasel}(3674)
├─{iceweasel}(3675)
├─{iceweasel}(3676)
├─{iceweasel}(3677)
├─{iceweasel}(3681)
├─{iceweasel}(3682)
...
Setiap utas memiliki PID masing-masing.
Dua alat standar untuk menampilkan informasi proses adalah ps
dan top
(dan htop
yang serupa/ ditingkatkan ).
Catatan:
ps -m
, ps m
, ps H
...)Tampilan realtime dari semua atau proses, menggunakan top -H
top - 16:24:42 up 3:49, 3 users, load average: 0.23, 0.29, 0.31
Threads: 503 total, 2 running, 501 sleeping, 0 stopped, 0 zombie
%Cpu(s): 9.7 us, 1.6 sy, 0.0 ni, 88.5 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 3938668 total, 2148708 used, 1789960 free, 133524 buffers
KiB Swap: 3903484 total, 0 used, 3903484 free. 822904 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1054 root 20 0 258664 3524 2692 S 0.0 0.1 0:00.00 rsyslogd
1086 root 20 0 258664 3524 2692 S 0.0 0.1 0:00.03 in:imuxsock
1087 root 20 0 258664 3524 2692 S 0.0 0.1 0:00.00 in:imklog
1090 root 20 0 258664 3524 2692 S 0.0 0.1 0:00.05 rs:main Q:Reg
2452 fpiat 20 0 25292 7520 3580 S 0.0 0.2 0:00.69 bash
2495 fpiat 20 0 25088 6988 3256 S 0.0 0.2 0:00.05 bash
Tampilan instan semua proses dan utas, menggunakan ps -eLf
$ ps -eLf
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 1054 1 1054 0 4 12:34 ? 00:00:00 /usr/sbin/rsyslogd -n
root 1054 1 1086 0 4 12:34 ? 00:00:00 /usr/sbin/rsyslogd -n
root 1054 1 1087 0 4 12:34 ? 00:00:00 /usr/sbin/rsyslogd -n
root 1054 1 1090 0 4 12:34 ? 00:00:00 /usr/sbin/rsyslogd -n
franklin 2452 2448 2452 0 1 12:35 pts/0 00:00:00 /bin/bash
franklin 2495 2448 2495 0 1 12:36 pts/1 00:00:00 /bin/bash
tas informasi dari suatu proses, menggunakan ps -T
ps -T -C rsyslogd
PID SPID TTY TIME CMD
1054 1054 ? 00:00:00 rsyslogd
1054 1086 ? 00:00:00 in:imuxsock
1054 1087 ? 00:00:00 in:imklog
1054 1090 ? 00:00:00 rs:main Q:Reg
(catatan: gunakan salah satu opsi -C command
, atau -p PID
untuk memilih proses)
Perincian utas informasi dari suatu proses, menggunakan custom ps
$ ps -L -o pid,lwp,pri,Nice,start,stat,bsdtime,cmd,comm -C rsyslogd
PID LWP PRI NI STARTED STAT TIME CMD COMMAND
1054 1054 19 0 12:34:53 Ssl 0:00 /usr/sbin/rsyslogd -n rsyslogd
1054 1086 19 0 12:34:53 Ssl 0:00 /usr/sbin/rsyslogd -n in:imuxsock
1054 1087 19 0 12:34:53 Ssl 0:00 /usr/sbin/rsyslogd -n in:imklog
1054 1090 19 0 12:34:53 Ssl 0:00 /usr/sbin/rsyslogd -n rs:main Q:Reg
Anda dapat mencoba top -H -p <pid>
.
Tetapi harap dicatat pada beberapa pilihan rasa '-H' Unix tidak tersedia dalam perintah top
.
ps -H le <pid>
Ini akan menampilkan utas sebagai proses. Juga ingat bahwa semua utas multi-utas harus memiliki PID yang sama. Linux melakukan ini dengan membuat grup utas. Utas pertama adalah pemimpin grup dan PID-nya akan tgid (utas grupID) dari grup utas.
Anda dapat mengetahui PID aktual dan status utas dengan menggunakan sistem file/proc. Cara lain untuk mencapai ini adalah dengan memeriksa PID dengan menggunakan ps, kemudian jalankan perintah berikut:
cat /proc/pid/status
Kemudian periksa lebih lanjut id/tgid dari utas dan jalankan perintah berikut:
cat /proc/pid/task/threadid/status
top -H -p <process_id>
Ini akan memberi Anda daftar utas, yang terkait dengan proses Anda (mis. Process_id) [Digunakan di Ubuntu. Ada kemungkinan bahwa opsi -H tidak tersedia pada beberapa rasa linux]
ps huH -p pid | wc -l
Perintah di atas menunjukkan jumlah running thread untuk proses tertentu pid if for Java proses
Saya mencari yang sama, dan dapat membuat skrip bash berikut,
Ini masih dalam proses, saya akan memperbarui ini saat saya meningkatkan skrip.
Saya bukan pakar unix, saya yakin beberapa pakar dapat menulisnya dalam 2 baris, dengan kualitas yang lebih baik, tetapi tujuan saya adalah untuk memberikan solusi yang berfungsi untuk orang lain.
perbarui dengan filter dan proses informasi
#!/bin/bash
ps -ef --no-headers | while read line; do # for each process read the info (without headers)
IFS=' ' read -r -a array <<< "$line" # split info into array
psResultStr="ps -p ${array[1]} -lfT | wc -c" # count how many threads per PID
numThreads=$(eval $psResultStr) # trying to convert it to number so i can filter later
if [ "$numThreads" -gt "1000" ] #only show process with 1K or more
then
printf "Number of threads for PID:${array[1]} Has $numThreads Threads. Process info: "
for ((i = 7; i < ${#array[@]}; ++i)); do #Process info starts at idx 7
position=$(( $i + 1 )) # bash arrays are 0-indexed
lineText=$(echo ${array[$i]}|tr -d '\n') # remove any new lines
printf "%s" "$lineText" #output line item
done
printf "\n\n"
fi
done