ОБ/МИН:
DEB:
Вероятно, более важным вопросом является диспетчер пакетов (dpkg по сравнению с конфеткой по сравнению со способностью и т.д.), а не формат пакета (поскольку оба сопоставимы).
Классический инструмент top
выставочным процессам по умолчанию, но можно сказать показать потоки с H
нажатие клавиши или -H
параметр командной строки. Существует также htop, который подобен top
но имеет прокрутку и цвета; это показывает все потоки по умолчанию (но это может быть выключено). ps
также имеет несколько опций показать потоки, особенно H
и -L
.
Существуют также инструменты GUI, которые могут показать информацию о потоках, например, qps (простая обертка GUI вокруг ps
) или носатый (системный монитор с большим количеством параметров конфигурации).
Для каждого процесса большая информация доступна в /proc/12345
где 12345
идентификатор процесса. Информация о каждом потоке доступна в /proc/12345/task/67890
где 67890
идентификатор потока ядра. Это то, где ps
, top
и другие инструменты получают свою информацию.
Я хотел бы прояснить, что каждый ответ здесь предоставляет Вам точно, что Вы указали, список всех потоков, связанных с процессом, это не может быть очевидно в htop
поскольку это, по умолчанию, перечисляет все потоки в системе, не только процесс, но и top -H -p <pid>
работы лучше, например:
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
Как примечание стороны, поток с -90
на самом деле поток в реальном времени.
Существует также другая опция, которая является истинным CLI ps -e -T | grep <application name or pid>
-e
шоу все процессы-T
списки все потоки|
передает вывод по каналу к следующей командеgrep
это фильтрует содержаниеВот пример:
$ 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
Каждый из них имеет тот же PID, таким образом, Вы знаете, что они находятся в том же процессе.
sed
вместо grep
можно сохранить заголовок с тривиальным кодом: ps -e -T | sed -n '1p; /clementine/p;'
– Mei
16.02.2012, 17:25
man top
говорит, что это - псевдоним к LWP
и TID
, тогда как LWP = легкий процесс и TID = распараллеливают идентификатор.
– Hi-Angel
03.08.2017, 21:19
Можно попробовать top -H -p <pid>
.
Но отметьте на некоторых разновидностях Unix '-H' опция, не доступно в top
команда.
-H
; Linux использует инструменты GNU (включая ps
) и UNIX не делает. (Это - конечно, обобщение...)
– Mei
16.02.2012, 17:26
top -H -p <process_id>
Здесь перечислены потоки, связанные с вашим процессом (т.е. process_id) [Используется в Ubuntu. Существует вероятность, что опция -H недоступна в некоторых вариантах Linux.]
Два стандартных инструмента для показать информацию в процессе PS
и Верхний
(и HTOP
, который аналогичен / улучшено ).
Примечания:
PS -M
, PS M
, , PS H
...)
Взгляд в реальном времени все или процесс, используя 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
мгновенный вид на все процессы и потоки, с использованием PS vehelf
$ 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
Резьба информация о процессе, с использованием 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
(Примечание: используйте любую опцию -C Command
, или -P PID
, чтобы выбрать процесс)
Подробнее Темы Информация о процессе, с использованием пользовательских 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
ps -H le <pid>
Это должно отображать потоки как процессы. Также помните, что все потоки многопоточности должны иметь одинаковый PID. Linux делает это, создавая группы потоков. Первый поток является лидером группы, и его PID будет tgid (идентификатор группы потока) группы потоков.
Вы можете узнать фактический PID и статус потоков с помощью файловой системы / proc. Другой способ добиться этого - проверить PID с помощью ps, а затем выполнить следующую команду:
cat /proc/pid/status
Затем проверить дальше pids / tgid потоков и выполните следующую команду:
cat /proc/pid/task/threadid/status
ps huH -p pid | wc -l
Команда выше показывает количество запущенных потоков для конкретного процесса pid , если для процесса Java
Я искал то же самое и смог придумать следующий сценарий bash:
Это все еще продолжается, я буду обновлять это по мере улучшения сценария.
Я не эксперт по Unix, я уверен, что какой-то эксперт может написать это в 2 строки с лучшим качеством, но я намерен предоставить работающее решение для других.
обновить информацию о фильтрах и процессах
#!/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