Linux进程与线程状态监测 | 您所在的位置:网站首页 › 监控进程开启与关闭 › Linux进程与线程状态监测 |
问题
我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我们想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率)。 Linux上显示某个进程的线程的几种方式ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息,我们需要添加相应的参数来设置。 ps命令列出了由进程号为的进程创建的所有线程: $ ps -T -p ps命令中,“-T”选项可以开启线程查看。SID栏表示线程ID,而CMD栏则显示了线程名称。 top 命令top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。或者在top运行时,通过按“H”键将线程查看模式切换为开或关。 $ top -H要让top输出某个特定进程并检查该进程内运行的线程状况: $ top -H -p
htop中启用线程查看的步骤: 先开启htop,然后按< F2 >来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按< F10 >退出设置。
ps 查看某个时间点的进程信息。 $ ps -l #查看自己的进程 $ ps aux #查看系统所有进程 $ ps aux | grep threadx #查看特定的进程pstree 查看进程树。 $ pstree -A #查看所有进程树netstat -anp 查看端口占用情况。 $ netstat -anp | grep port #查看特定端口的进程 QAQQ:Linux下的线程与进程有什么区别? 用户级线程 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的。内核级线程 切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态,被称为内核支持的线程或轻量级进程。Q:孤儿进程和僵尸进程是什么? 孤儿进程: 一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作,,因此孤儿进程不会对系统造成危害。僵尸进程: 一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。 状态标识:僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。 产生的问题:系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。 解决办法:要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。 线程当一个程序内有多个线程被拆分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使拆分开销最小化,并避免大量高成本的IPC(进程间通信)通道。 线程与进程之间的ID在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。 参考资料Linux上如何查看某个进程的线程 htop 命令详解 CS-Notes_Linux |
CopyRight 2018-2019 实验室设备网 版权所有 |