### current community

- chat
  Unix & Linux
- Unix & Linux Meta

### your communities

Sign up or log in to customize your list.

### more stack exchange communities

company blog
Stack Exchange Inbox Reputation and Badges
sign up log in tour help

- Tour Start here for a quick overview of the site
- Help Center Detailed answers to any questions you might have
- Meta Discuss the workings and policies of this site
- About Us Learn more about Stack Overflow the company
- Business Learn more about hiring developers or posting ads with us

Unix & Linux
_
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:
Sign up
Here's how it works:

1. Anybody can ask a question
2. Anybody can answer
3. The best answers are voted up and rise to the top

# Is there a way to see details of all the threads that a process has in Linux?

up vote 47 down vote favorite 16 | For Windows, I think Process Explorer shows you all the threads under a process. Is there a similar command line utility for Linux that can show me details about all the threads a particular process is spawning? I think I should have made myself more clear. I do not want to see the process hierarcy, but a list of all the threads spawned by a particular process See this screenshot How can this be achieved in Linux? Thanks! command-line shell process
| edited Oct 5 '10 at 15:04 hop 1,832 13 17 | asked Aug 20 '10 at 13:12 Lazer 8,676 16 51 72
| stackoverflow.com/questions/268680/… – Ciro Santilli 烏坎事件2016六四事件 法轮功 Nov 3 '15 at 17:25
add a comment |

## 7 Answers 7

active oldest votes

up vote 37 down vote accepted | The classical tool `top` shows processes by default but can be told to show threads with the `H` key press or `-H` command line option. There is also htop, which is similar to `top` but has scrolling and colors; it shows all threads by default (but this can be turned off). `ps` also has a few options to show threads, especially `H` and `-L`. There are also GUI tools that can show information about threads, for example qps (a simple GUI wrapper around `ps`) or conky (a system monitor with lots of configuration options). For each process, a lot of information is available in `/proc/12345` where `12345` is the process ID. Information on each thread is available in `/proc/12345/task/67890` where `67890` is the kernel thread ID. This is where `ps`, `top` and other tools get their information.
| answered Aug 20 '10 at 14:39 Gilles 377k 72 691 1136
add a comment |

up vote 22 down vote | htop, a curses version of top, has a display option for showing all the threads for each process in a tree view. Starting `htop` and pressing `F5` will result in:
| edited Mar 19 '14 at 15:42 Sicco 103 4 | answered Aug 20 '10 at 14:29 Michael Mrozek♦ 46k 19 147 183
add a comment |

up vote 20 down vote | ## Listing threads under Linux ### Current provide answers Hello Lazer, I would like to make it clear that each answer here is providing you with exactly what you have specified, a list of all threads associated with a process, this maybe be unobvious in `htop` as it by defaults lists all threads on the system not just the process, but `top -H -p <pid>` works better for example:
    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
as a side note the thread with -90 is actually a realtime thread ### but There's also another option which is true CLI `ps -e -T | grep <application name or pid>` `-e` show's all processes `-T` lists all threads `|` pipes the output to the next command `grep` this filters the contents here's an example:
    $ 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
    $
each of these has the same PID so you know they are in the same process please don't hesitate to ask more questions
| edited Aug 23 '10 at 12:14 | answered Aug 23 '10 at 12:07 Daniel Hill 381 1 3
| thanks! What does SPID stand for? – Lazer Aug 24 '10 at 6:06
2 |
| Note that there's also ps -Tp <pid>, since the grep is a bit fuzzy unless you make it more complicated. – Thomas Themel Nov 28 '10 at 5:58
3 |
| If you use `sed` instead of `grep` you can preserve the title with trivial code: `ps -e -T | sed -n '1p; /clementine/p;'` – Mei Feb 16 '12 at 15:25
| thanx @Daniel ,, I am curious that .Can I use these PID's to make a group as we do in multicast?? – jazzz Nov 17 '14 at 8:04
add a comment |

up vote 8 down vote | You may try to use:
    /usr/bin/pstree $PID
For example:
    # 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)
                    ...
Each thread has its own PID.
| answered Mar 19 '14 at 23:10 user2496 198 2 7
add a comment |

up vote 7 down vote | You can try `top -H -p <pid>`. But please note on some Unix flavors '-H' option is not available in `top` command.
| answered Aug 20 '10 at 13:44 Hemant 3,346 2 26 36
1 |
| I would venture that no UNIX supports `-H`; Linux uses GNU tools (including `ps`) and UNIX does not. (This is, of course, a generalization...) – Mei Feb 16 '12 at 15:26
1 |
| "top -H -p <pid>" was able to do what I wanted. Thanks! – Wing Tang Wong Dec 3 '14 at 21:39
add a comment |

up vote 7 down vote | The two standard tools to show process informations are `ps` and `top` (and `htop` which is similar/improved). Notes: Many program change the apparent name of the threads to something meaningful, the tools below can either display the binary name or that apparent name (check PID 1086 in the examples below). In the examples below, I have removed most process to keep the answer short. The command arguments example below are common ones. check the manpage for alternate options (`ps -m`, `ps m`, `ps H`...) Realtime view of all or process, using `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
Instant view of all process and threads, using `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
Threads information of a process, using `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
(note: use either option `-C command`, or `-p PID` to select the process) Details threads information of a process, using 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
| answered Apr 4 '15 at 20:11 Franklin Piat 1,126 9 18
add a comment |

up vote 1 down vote |
    top -H -p <process_id>
This will list you the threads, associated with your process (i.e. process_id) [Used on Ubuntu. There is possibility that the option -H is not available on some of the linux flavors]
| answered Jan 18 at 11:26 parasrish 111 3
add a comment |

## Your Answer

draft saved
draft discarded

### Sign up or log in

Sign up using Google

Sign up using Facebook

Sign up using Email and Password

### Post as a guest

Name Email

discard

By posting your answer, you agree to the privacy policy and terms of service.

## Not the answer you're looking for? Browse other questions tagged command-line shell process or ask your own question.

question feed
lang-sh