Linux下查看进程和线程

合集下载

关于linux的进程中的各个线程cpu占用情况的分析和查看

关于linux的进程中的各个线程cpu占用情况的分析和查看

关于linux的进程中的各个线程cpu占⽤情况的分析和查看我们常常会在新开的服搭建⼀个游戏的server,有时候要进⾏压⼒測试,那么怎样来看呢,⼀般我们会通过top命令查看各个进程的cpu和内存占⽤情况,获得到了我们的进程id,然后我们或许会通过pstack命令查看⾥边的各个线程id以及相应的线程如今正在做什么事情,分析多组数据就能够获得哪些线程⾥有慢操作影响了server的性能,从⽽得到解决⽅式。

⽐⽅这种以组数据:[root@AY130816144542124256Z bin]# pstack 30222Thread 9 (Thread 0x7f729adc1700 (LWP 30251)):#0 0x00007f72a429b720 in sem_wait () from /lib64/libpthread.so.0#1 0x0000000000ac5eb6 in Semaphore::down() ()#2 0x0000000000ac5cac in Queue::get() ()#3 0x00000000009a583f in DBManager::processUpdate(Queue*) ()#4 0x00000000009a4bfb in dbUpdateThread(void*) ()#5 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0#6 0x00007f72a459267d in clone () from /lib64/libc.so.6Thread 8 (Thread 0x7f727c579700 (LWP 30252)):#0 0x00007f72a429b720 in sem_wait () from /lib64/libpthread.so.0#1 0x0000000000ac5eb6 in Semaphore::down() ()#2 0x0000000000ac5cac in Queue::get() ()#3 0x00000000009a5799 in DBManager::processQuery(Queue*) ()#4 0x00000000009a4c3a in dbQueryThread(void*) ()#5 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0#6 0x00007f72a459267d in clone () from /lib64/libc.so.6Thread 7 (Thread 0x7f7257fff700 (LWP 30253)):#0 0x00007f72a42997bb in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0#1 0x00007f72a549ee08 in utils::thread::condition_impl::timed_wait(int) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1#2 0x00007f72a549ebd3 in utils::thread::Condition::timed_wait(int) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1#3 0x00000000009d5f57 in utils::MessageQueue<FightInfo*>::pop() ()#4 0x00000000009d5557 in FightReport::svc() ()#5 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1#6 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0#7 0x00007f72a459267d in clone () from /lib64/libc.so.6Thread 6 (Thread 0x7f72397b7700 (LWP 30254)):#0 0x00007f72a4588fc3 in poll () from /lib64/libc.so.6#1 0x00007f72a0fbded4 in __libc_res_nsend () from /lib64/libresolv.so.2#2 0x00007f72a0fba76a in __libc_res_nquery () from /lib64/libresolv.so.2#3 0x00007f72a0fbad29 in __libc_res_nquerydomain () from /lib64/libresolv.so.2#4 0x00007f72a0fbb9cf in __libc_res_nsearch () from /lib64/libresolv.so.2#5 0x00007f729adc37a7 in _nss_dns_gethostbyname4_r () from /lib64/libnss_dns.so.2#6 0x00007f72a457a4c3 in gaih_inet () from /lib64/libc.so.6#7 0x00007f72a457cb20 in getaddrinfo () from /lib64/libc.so.6#8 0x00007f72a56fc782 in Curl_getaddrinfo_ex () from /usr/lib64/libcurl.so.4#9 0x00007f72a56f1d42 in Curl_getaddrinfo () from /usr/lib64/libcurl.so.4#10 0x00007f72a56c9e77 in Curl_resolv () from /usr/lib64/libcurl.so.4#11 0x00007f72a56ca138 in Curl_resolv_timeout () from /usr/lib64/libcurl.so.4#12 0x00007f72a56d8d88 in ?() from /usr/lib64/libcurl.so.4#13 0x00007f72a56ddb79 in ?() from /usr/lib64/libcurl.so.4#14 0x00007f72a56de76e in Curl_connect () from /usr/lib64/libcurl.so.4#15 0x00007f72a56e69b0 in Curl_perform () from /usr/lib64/libcurl.so.4#16 0x0000000000ae6e3d in HttpClient::svc() ()#17 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1#18 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0#19 0x00007f72a459267d in clone () from /lib64/libc.so.6Thread 5 (Thread 0x7f721af6f700 (LWP 30255)):#0 0x00007f72a455691d in nanosleep () from /lib64/libc.so.6#1 0x000000000098cb8a in Sleep(unsigned long) ()#2 0x000000000098b87d in DynResource::svc() ()#3 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1#4 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0#5 0x00007f72a459267d in clone () from /lib64/libc.so.6Thread 4 (Thread 0x7f71fc727700 (LWP 30256)):#0 0x00007f72a455691d in nanosleep () from /lib64/libc.so.6#1 0x000000000098cb8a in Sleep(unsigned long) ()#2 0x0000000000a61516 in PlayerOpLogThread::svc() ()#3 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1#4 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0#5 0x00007f72a459267d in clone () from /lib64/libc.so.6Thread 3 (Thread 0x7f71ddedf700 (LWP 30257)):#0 0x00007f72a4592c73 in epoll_wait () from /lib64/libc.so.6#1 0x00007f72a51f334f in Epoll_Reactor::run_reactor_event_loop() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2#2 0x00007f72a51f2523 in Net_Thread::svc() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2#3 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1#4 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0#5 0x00007f72a459267d in clone () from /lib64/libc.so.6Thread 2 (Thread 0x7f71bf697700 (LWP 30258)):#0 0x00007f72a4592c73 in epoll_wait () from /lib64/libc.so.6#1 0x00007f72a51f334f in Epoll_Reactor::run_reactor_event_loop() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2#2 0x00007f72a51f2523 in Net_Thread::svc() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2#3 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1#4 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0#5 0x00007f72a459267d in clone () from /lib64/libc.so.6Thread 1 (Thread 0x7f72a60ae7e0 (LWP 30222)):#0 0x00007f72a4584c95 in _xstat () from /lib64/libc.so.6#1 0x00007f72a45483e0 in __tzfile_read () from /lib64/libc.so.6#2 0x00007f72a4547864 in tzset_internal () from /lib64/libc.so.6#3 0x00007f72a4547b20 in tzset () from /lib64/libc.so.6#4 0x00007f72a4546699 in timelocal () from /lib64/libc.so.6#5 0x0000000000b0b08d in Achieve::GetRemainTime(AchieveTemplate*) ()#6 0x0000000000b115ca in Achieve::update() ()#7 0x0000000000a197ce in Player::update() ()#8 0x0000000000b1b272 in PlayerMng::Tick() ()#9 0x0000000000a73105 in GameServer::FrameTick(unsigned int) ()#10 0x0000000000a6ff80 in GameServer::run() ()#11 0x0000000000a773a1 in main ()[root@AY130816144542124256Z gameserver]# ps -eLo pid,lwp,pcpu | grep 3022230222 30222 31.430222 30251 0.030222 30252 0.030222 30253 0.030222 30254 0.030222 30255 0.030222 30256 1.230222 30257 1.230222 30258 1.0多组数据显⽰表明我们的主逻辑线程的确占⽤的cpu⾮常⾼,发现事实上在Achieve::update() 的时候做了太多没实⽤的推断,⽽且能够降低循环进⼊的次数的。

Linux系统如何查看进程的线程数

Linux系统如何查看进程的线程数

Linux系统如何查看进程的线程数Linux系统如何查看进程的线程数Linux系统的进程是由线程组成的,当然Linux进程下的线程数是不固定的,可以是一个进程,也可以是多个进程。

本文就来教大家Linux系统如何查看进程的线程数?一、使用命令查看Linux进程的线程数1、使用top命令,具体用法是 top -H加上这个选项,top的每一行就不是显示一个进程,而是一个线程。

2、使用ps命令,具体用法是 ps -xH这样可以查看所有存在的线程,也可以使用grep作进一步的过滤。

3、使用ps命令,具体用法是 ps -mq PID这样可以看到指定的进程产生的线程数目。

二、Linux系统工具查看Linux进程看看这个目录吧,/proc/5000/ 这里面有你所有想要的。

其实stat代表着当前的一些信息。

使用ps命令来查看进程的时候,进程状态分别对应的含义如下:D 不可中断睡眠(通常是在IO操作)收到信号不唤醒和不可运行,进程必须等待直到有中断发生R 正在运行或可运行(在运行队列排队中)S 可中断睡眠(休眠中,受阻,在等待某个条件的形成或接受到信号)T 已停止的` 进程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU 信号后停止运行W 正在换页(2.6.内核之前有效)X 死进程(未开启)Z 僵尸进程进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放BSD风格的《高优先级(not nice to other users)N 低优先级(nice to other users)L 页面锁定在内存(实时和定制的IO)s 一个信息头l 多线程(使用 CLONE_THREAD,像NPTL的pthreads的那样)+ 在前台进程组以上就是Linux查看进程的线程数的方法了,Linux进程的线程数是进程的一个重要参数,也是管理Linux进程应该要知道的信息。

【Linux系统如何查看进程的线程数】。

Linux命令行中的进程状态查看技巧

Linux命令行中的进程状态查看技巧

Linux命令行中的进程状态查看技巧进程(Process)是指计算机中正在运行的程序的实例。

在Linux命令行中,我们可以使用不同的命令来查看和管理系统中运行的进程。

本文将介绍一些常用的Linux命令行中的进程状态查看技巧。

一、查看当前运行的进程1. ps命令ps命令是Linux系统中最常用的查看进程的命令之一。

它的基本用法是:```shellps aux```该命令将显示当前运行的所有进程的详细信息,包括进程ID (PID)、父进程ID(PPID)、用户ID(UID)、CPU占用率、内存占用等等。

这些信息可以帮助我们了解系统资源的使用情况,并且可以根据需要对进程进行管理。

2. top命令top命令提供了一个实时的进程监视器,可以动态地显示系统中运行的进程和它们的资源使用情况。

运行top命令后,可以按需查看各个进程的CPU占用率、内存占用、进程ID等信息,并可以通过快捷键进行排序和过滤。

使用top命令的基本方法是在命令行中输入:```shelltop```二、查看特定进程1. pgrep命令pgrep命令允许通过进程名称或其它属性查找进程的进程ID。

例如,要查找名为"apache"的进程,可以使用以下命令:```shellpgrep apache```该命令将显示满足条件的进程的PID。

2. pstree命令pstree命令以树状图的形式显示进程的层次结构关系。

可以通过以下方式使用pstree命令:```shellpstree```该命令将显示系统中所有进程的层次结构关系,使我们更清晰地了解进程之间的关系。

三、查看进程状态1. ps命令在ps命令中,我们可以使用不同的参数来查看进程的状态。

例如,要查看指定进程ID的状态,可以使用以下命令:```shellps -p <pid> -o state```其中,<pid>是进程ID。

2. top命令在top命令中,我们可以使用不同的快捷键来查看进程的状态。

linux一些常用的查看资源使用命令

linux一些常用的查看资源使用命令

linux一些常用的查看资源使用命令
在Linux系统中,可以使用以下命令来查看资源的使用情况:
1. top:实时查看系统的整体运行情况,包括CPU、内存、进程等的使用情况。

2. free:查看系统内存的使用情况,包括空闲内存、已使用内存、缓存和缓冲区的使用情况。

3. df:查看文件系统的磁盘空间使用情况,包括总容量、已用空间、剩余空间和挂载点。

4. du:查看目录或文件的磁盘使用情况,可以查看目录下所有文件的大小。

5. ps:查看系统当前运行的进程,可以查看进程的PID、占用CPU和内存等信息。

6. iostat:查看系统磁盘和设备的IO使用情况,包括读写速度、IOPS等。

7. netstat:查看网络连接和网络统计信息,包括监听端口、已建立的连接等。

8. sar:查看系统性能统计数据,包括CPU使用率、内存使用率、磁盘IO等。

9. vmstat:查看系统的虚拟内存使用情况,包括交换空间、页缓存、进程等。

10. lsof:查看系统打开的文件和网络连接,可以查看进程打开的文件和端口。

以上只是常用的几个命令,实际上Linux还有很多其他命令可以查看系统资源的使用情况,可以根据具体需求选择适合的命令来使用。

Linux命令高级技巧使用ps命令查看系统进程和资源占用情况

Linux命令高级技巧使用ps命令查看系统进程和资源占用情况

Linux命令高级技巧使用ps命令查看系统进程和资源占用情况在Linux系统中,ps命令是一个非常常用的命令,用于查看系统的进程和资源占用情况。

它可以显示正在运行的进程的详细信息,包括进程的PID(进程ID)、CPU占用率、内存占用率等。

本文将介绍一些ps命令的高级技巧,帮助您更好地使用ps命令查看系统进程和资源占用情况。

1. 使用ps命令查看所有进程要查看系统中所有的进程,可以使用以下命令:```ps -ef```该命令将显示所有正在运行的进程的详细信息,包括进程的PID、父进程的PID、进程的状态、CPU占用率、内存占用率等。

2. 使用ps命令按照进程ID排序有时候,我们需要按照进程ID的顺序查看进程信息。

可以使用以下命令:```ps -ef --sort=pid```该命令将按照进程ID的顺序显示进程信息。

3. 使用ps命令查看指定用户的进程如果您只想查看特定用户的进程信息,可以使用以下命令:```ps -u username```将`username`替换为您要查看的用户名。

该命令将只显示该用户运行的进程信息。

4. 使用ps命令查看特定进程的详细信息要查看特定进程的详细信息,可以使用以下命令:```ps -p pid -o pid,ppid,cmd,%cpu,%mem```将`pid`替换为您要查看的进程的PID。

该命令将显示该进程的PID、父进程的PID、命令行、CPU占用率和内存占用率等信息。

5. 使用ps命令显示进程树有时候,我们希望以树状结构显示进程信息,可以使用以下命令:```ps -ef --forest```该命令将以树状结构显示进程信息,方便我们查看进程之间的关系。

6. 使用ps命令查看进程的线程信息有些进程是多线程的,如果您想查看特定进程的线程信息,可以使用以下命令:```ps -T -p pid```将`pid`替换为您要查看的进程的PID。

该命令将显示该进程的线程信息,包括线程的ID、状态、CPU占用率和内存占用率等。

linux下查看进程(ps命令)

linux下查看进程(ps命令)

linux下查看进程(ps命令) Linux中的ps命令是Process Status的缩写。

ps命令⽤来列出系统中当前运⾏的那些进程。

ps命令列出的是当前那些进程的快照,就是执⾏ps命令的那个时刻的那些进程,如果想要动态的显⽰进程信息,就可以使⽤top命令。

要对进程进⾏监测和控制,⾸先必须要了解当前进程的情况,也就是需要查看当前进程,⽽ ps 命令就是最基本同时也是⾮常强⼤的进程查看命令。

使⽤该命令可以确定有哪些进程正在运⾏和运⾏的状态、进程是否结束、进程有没有僵死、哪些进程占⽤了过多的资源等等。

总之⼤部分信息都是可以通过执⾏该命令得到的。

ps 为我们提供了进程的⼀次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该⽤ top ⼯具。

kill 命令⽤于杀死进程。

linux上进程有5种状态:1. 运⾏(正在运⾏或在运⾏队列中等待)2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)3. 不可中断(收到信号不唤醒和不可运⾏, 进程必须等待直到有中断发⽣)4. 僵死(进程已终⽌, 但进程描述符存在, 直到⽗进程调⽤wait4()系统调⽤后释放)5. 停⽌(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停⽌运⾏运⾏)ps⼯具标识进程的5种状态码:D 不可中断 uninterruptible sleep (usually IO)R 运⾏ runnable (on run queue)S 中断 sleepingT 停⽌ traced or stoppedZ 僵死 a defunct (”zombie”) process1.命令格式:ps[参数]2.命令功能:⽤来显⽰当前进程的状态3.命令参数:a 显⽰所有进程-a 显⽰同⼀终端下的所有程序-A 显⽰所有进程c 显⽰进程的真实名称-N 反向选择-e 等于“-A”e 显⽰环境变量f 显⽰程序间的关系-H 显⽰树状结构r 显⽰当前终端的进程T 显⽰当前终端的所有程序u 指定⽤户的所有进程-au 显⽰较详细的资讯-aux 显⽰所有包含其他使⽤者的⾏程-C<命令> 列出指定命令的状况--lines<⾏数> 每页显⽰的⾏数--width<字符数> 每页显⽰的字符数--help 显⽰帮助信息--version 显⽰版本显⽰4.使⽤实例:实例1:显⽰所有进程信息命令:ps -A输出:代码如下:[root@localhost test6]# ps -APID TTY TIME CMD1 ? 00:00:00 init2 ? 00:00:01 migration/03 ? 00:00:00 ksoftirqd/04 ? 00:00:01 migration/15 ? 00:00:00 ksoftirqd/16 ? 00:29:57 events/07 ? 00:00:00 events/18 ? 00:00:00 khelper49 ? 00:00:00 kthread54 ? 00:00:00 kblockd/055 ? 00:00:00 kblockd/156 ? 00:00:00 kacpid217 ? 00:00:00 cqueue/0说明:实例2:显⽰指定⽤户信息命令:ps -u root输出:代码如下:[root@localhost test6]# ps -u rootPID TTY TIME CMD1 ? 00:00:00 init2 ? 00:00:01 migration/03 ? 00:00:00 ksoftirqd/04 ? 00:00:01 migration/15 ? 00:00:00 ksoftirqd/16 ? 00:29:57 events/07 ? 00:00:00 events/18 ? 00:00:00 khelper49 ? 00:00:00 kthread54 ? 00:00:00 kblockd/055 ? 00:00:00 kblockd/156 ? 00:00:00 kacpid说明:实例3:显⽰所有进程信息,连同命令⾏命令:ps -ef输出:代码如下:[root@localhost test6]# ps -efUID PID PPID C STIME TTY TIME CMD root 1 0 0 Nov02 ? 00:00:00 init [3]root 2 1 0 Nov02 ? 00:00:01 [migration/0] root 3 1 0 Nov02 ? 00:00:00 [ksoftirqd/0] root 4 1 0 Nov02 ? 00:00:01 [migration/1] root 5 1 0 Nov02 ? 00:00:00 [ksoftirqd/1] root 6 1 0 Nov02 ? 00:29:57 [events/0] root 7 1 0 Nov02 ? 00:00:00 [events/1]root 8 1 0 Nov02 ? 00:00:00 [khelper]root 49 1 0 Nov02 ? 00:00:00 [kthread]root 54 49 0 Nov02 ? 00:00:00 [kblockd/0]root 55 49 0 Nov02 ? 00:00:00 [kblockd/1]root 56 49 0 Nov02 ? 00:00:00 [kacpid]说明:实例4: ps 与grep 常⽤组合⽤法,查找特定进程命令:ps -ef|grep ssh输出:代码如下:[root@localhost test6]# ps -ef|grep sshroot 2720 1 0 Nov02 ? 00:00:00 /usr/sbin/sshdroot 17394 2720 0 14:58 ? 00:00:00 sshd: <a href="mailto:root@pts/0">root@pts/0</a>root 17465 17398 0 15:57 pts/0 00:00:00 grep ssh说明:实例5:将⽬前属于您⾃⼰这次登⼊的 PID 与相关信息列⽰出来命令:ps -l输出:代码如下:[root@localhost test6]# ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD4 S 0 17398 17394 0 75 0 - 16543 wait pts/0 00:00:00 bash4 R 0 17469 17398 0 77 0 - 15877 - pts/0 00:00:00 ps说明:各相关信息的意义:F 代表这个程序的旗标 (flag), 4 代表使⽤者为 super userS 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内⽂介绍UID 程序被该 UID 所拥有PID 就是这个程序的 ID !PPID 则是其上级⽗程序的IDC CPU 使⽤的资源百分⽐PRI 这个是 Priority (优先执⾏序) 的缩写,详细后⾯介绍NI 这个是 Nice 值,在下⼀⼩节我们会持续介绍ADDR 这个是 kernel function,指出该程序在内存的那个部分。

linux查看线程名称的方法

linux查看线程名称的方法

linux查看线程名称的方法在Linux环境下,要查看线程名称,可以使用以下方法:1.通过ps命令查看线程名称:在Linux中,可以使用ps命令(process status)来查看进程的状态信息,包括进程的名称、PID(进程ID)、线程数量等。

使用如下命令来查看所有线程的信息:```ps -eLf```输出结果中,第一个列是线程的ID(LWP),第四列是进程ID (PID),第七列是线程的名称(COMM)。

通过查看该列的内容,就可以获取线程的名称。

除了使用-eLf选项,还可以使用其他选项,如-a(显示终端上的所有进程)、-A(显示所有进程)、u(显示用户相关的进程)等。

2.通过top命令查看线程名称:top命令是一个实时的动态监视工具,可以显示系统的整体状态和各个进程的资源使用情况。

默认情况下,top命令会按照CPU使用率降序排序,展示前几个消耗CPU资源最多的进程信息。

我们可以使用以下命令来查看所有线程的信息:```top -H```在top命令的输出结果中,PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND等列,可以查看到线程的ID(PID)、进程的名称(COMMAND)等信息。

top命令支持交互式操作,可以通过按键进行排序和筛选操作,如按下P键按照CPU使用率排序。

3.通过pstree命令查看线程名称:pstree命令可以以树状结构显示进程和子进程之间的关系。

可以使用如下命令来查看指定进程及其所有子进程的信息:pstree -p <PID>```这个命令输出了树状结构的进程和子进程,通过查看输出结果,可以获取线程的名称信息。

-p选项可以显示进程的PID。

4.通过/proc文件系统查看线程名称:在Linux系统中,每个进程都可以在/proc目录下找到一个以其PID为名称的目录,例如/proc/1234。

这个目录中包含了与该进程相关的各种信息。

Linux下查看线程数的几种方法汇总

Linux下查看线程数的几种方法汇总

Linux下查看线程数的⼏种⽅法汇总 Linux下查看线程数的⼏种⽅法汇总 作者:尹正杰版权声明:原创作品,谢绝转载!否则将追究法律责任。

⼀.Linux下查看某个进程的线程数量 pstree命令以树状图显⽰进程间的关系(display a tree of processes)。

ps命令可以显⽰当前正在运⾏的那些进程的信息,但是对于它们之间的关系却显⽰得不够清晰。

在Linux系统中,系统调⽤fork可以创建⼦进程,通过⼦shell也可以创建⼦进程,Linux系统中进程之间的关系天⽣就是⼀棵树,树的根就是进程PID为1的init进程。

1>.安装pstree命令⾏⼯具,包名为:“psmisc”[root@yinzhengjie bin]# yum -y install psmiscLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfileResolving Dependencies--> Running transaction check---> Package psmisc.x86_64 0:22.20-15.el7 will be installed--> Finished Dependency ResolutionDependencies Resolved==================================================================================================================================================================== Package Arch Version Repository Size==================================================================================================================================================================== Installing:psmisc x86_64 22.20-15.el7 base 141 kTransaction Summary==================================================================================================================================================================== Install 1 PackageTotal download size: 141 kInstalled size: 475 kDownloading packages:psmisc-22.20-15.el7.x86_64.rpm | 141 kB 00:00:00Running transaction checkRunning transaction testTransaction test succeededRunning transactionInstalling : psmisc-22.20-15.el7.x86_64 1/1Verifying : psmisc-22.20-15.el7.x86_64 1/1Installed:psmisc.x86_64 0:22.20-15.el7Complete![root@yinzhengjie bin]#[root@yinzhengjie bin]# yum -y install psmisc2>.相关参数介绍Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -g ] [ -u ][ -A | -G | -U ] [ PID | USER ]pstree -VDisplay a tree of processes.-a, --arguments 显⽰命令时候,并显⽰其参数的完整内容-A, --ascii 各进程树之间的连接以ASCII码字符来连接-c, --compact 取消同名兄弟进程的合并(默认会将同名的兄弟进程合并)-h, --highlight-all 突出当前进程及其祖先-H PID,--highlight-pid=PID 突出这个过程和它的祖先-g, --show-pgids 显⽰进程组ID;-G, --vt100 使⽤VT100线绘制字符-l, --long 不要截断长线。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在Linux中查看线程数的三种方法
1、top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。

否则,它一行显示一个进程。

2、ps xH
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。

3、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。

查看进程
1. top 命令
top命令查看系统的资源状况
load average表示在过去的一段时间内有多少个进程企图独占CPU
zombie 进程:不是异常情况。

一个进程从创建到结束在最后那一段时间遍是僵尸。

留在内存中等待父进程取的东西便是僵尸。

任何程序都有僵尸状态,它占用一点内存资源,仅仅是表象而已不必害怕。

如果程序有问题有机会遇见,解决大批量僵尸简单有效的办法是重起。

kill是无任何效果的stop模式:与sleep进程应区别,sleep会主动放弃cpu,而stop 是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的。

cpu states:
nice:让出百分比irq:中断处理占用
idle:空间占用百分比iowait:输入输出等待(如果它很大说明外存有瓶颈,需要升级硬盘(SCSI))
Mem:内存情况
设计思想:把资源省下来不用便是浪费,如添加内存后free值会不变,buff值会增大。

判断物理内存够不够,看交换分区的使用状态。

交互命令:
[Space]立即刷新显示
[h]显示帮助屏幕
[k] 杀死某进程。

你会被提示输入进程ID 以及要发送给它的信号。

一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。

默认值是信号15。

在安全模式中此命令被屏蔽。

[n] 改变显示的进程数量。

你会被提示输入数量。

[u] 按用户排序。

[M] 按内存用量排序。

[o][O] 改变显示项目的顺序。

[P] 根据CPU使用百分比大小进行排序。

[T] 根据时间/累计时间进行排序。

[Ctrl+L] 擦除并且重写屏幕。

[q] 退出程序。

[r] 重新安排一个进程的优先级别。

系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。

输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。

默认值是10。

[S] 切换到累计模式。

[s] 改变两次刷新之间的延迟时间。

系统将提示用户输入新的时间,单位为s。

如果有小数,就换算成m s。

输入0值则系统将不断刷新,默认值是5 s。

需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。

缩写含义:
PID每个进程的ID
USER进程所有者的用户名
PRI每个进程的优先级别
NI每个优先级的值
SIZE 进程的代码大小加上数据大小再加上堆栈空间大小的总数,单位是KB RSS 进程占用的物理内存的总数量,单位是KB
SHARE进程使用共享内存的数量
STAT 进程的状态。

其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z 代表僵死状态;T代表停止或跟踪状态
%CPU进程自最近一次刷新以来所占用的CPU时间和总时间的百分比
%MEM进程占用的物理内存占总内存的百分比
TIME进程自启动以来所占用的总CPU时间
CPU CPU标识
COMMAND进程的命令名称
2. ps命令
ps查看当前用户的活动进程,如果加上参数可以显示更多的信息,如-a,显示所有用户的进程
ps ax :tty值为“?”是守护进程,叫deamon 无终端,大多系统服务是此进程,内核态进程是看不到的
ps axf :看进程树,以树形方式现实进程列表敲,init是1号进程,系统所有进程都是它派生的,杀不掉
ps axm :会把线程列出来。

在linux下进程和线程是统一的,是轻量级进程的两种方式。

ps axu :显示进程的详细状态。

vsz:说此进程一共占用了多大物理内存。

rss:请求常驻内存多少
查看线程
其实linux没有线程,都是用进程模仿的
1. ps -ef f
用树形显示进程和线程,比如说我想找到proftp现在有多少个进程/线程,可以用
$ ps -ef f | grep proftpd
nobody 23117 1 0 Dec23 ? S 0:00 proftpd: (accepting connections)
jack 23121 23117 0 Dec23 ? S 7:57 \_ proftpd: jack - ftpsrv: IDLE
jack 28944 23117 0 Dec23 ? S 4:56 \_ proftpd: jack - ftpsrv: IDLE
这样就可以看到proftpd这个进程下面挂了两个线程。

在Linux下面好像因为没有真正的线程,是用进程模拟的,有一个是辅助线程,所以真正程序开的线程应该只有一个。

2. pstree -c也可以达到相同的效果
$ pstree -c | grep proftpd
|-proftpd-+-proftpd
| `-proftpd
3. cat /proc/${pid}/status
可以查看大致的情况
4. pstack
有些系统可以用这个东东,可以查看所有线程的堆栈
如何查看进程中各线程的内存占用情况?
用ps aux只能查看到进程,如果进程里面使用了pthread编程,用什么命令才能查询到进程里的线程资源占用?
ps aux | grep不就是了。

相关文档
最新文档