linux下查看进程/线程

本文介绍了如何使用ps和top命令来查看Linux系统中的进程状态。通过这些命令,用户可以获取进程的详细信息,如进程ID、内存和CPU使用情况等。此外,文章还介绍了如何使用GNOME系统监视器进行图形化管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ps ax 命令显示一个当前系统进程的列表,该列表中包括其他用户拥有的进程。要显示进程以及它们的所有者,使用 ps aux 命令。该列表是一个静态列表;换一句话说,它是在你启用这项命令时正在运行的进程的快照。如果你需要一个时刻更新的运行进程列表,使用下面描述的 top 命令。

ps 的输出会很长。要防止它快速从屏幕中滑过,你可以把它管道输出给 less 命令:

ps aux | less

你可以使用 ps 命令和 grep 命令的组合来查看某进程是否在运行。譬如,要判定 Emacs 是否在运行,使用下面这个命令:

ps ax | grep emacs

top 命令显示了当前正运行的进程以及关于它们的重要信息,包括它们的内存和 CPU 用量。该列表既是真实时间的也是互动的。以下提供了一个 top 的输出示例:

 19:11:04  up  7:25,  9 users,  load average: 0.00, 0.05, 0.12
89 processes: 88 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total    6.6%    0.0%    0.0%   0.0%     0.0%    0.0%  192.8%
           cpu00    6.7%    0.0%    0.1%   0.1%     0.0%    0.0%   92.8%
           cpu01    0.0%    0.0%    0.0%   0.0%     0.0%    0.0%  100.0%
Mem:  1028556k av,  241972k used,  786584k free,       0k shrd,   37712k buff
       162316k active,              18076k inactive
Swap: 1020116k av,       0k used, 1020116k free                   99340k cached
                                                                                
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
 1899 root      15   0 17728  12M  4172 S     6.5  1.2 111:20   0 X
 6380 root      15   0  1144 1144   884 R     0.3  0.1   0:00   0 top
    1 root      15   0   488  488   432 S     0.0  0.0   0:05   1 init
    2 root      RT   0     0    0     0 SW    0.0  0.0   0:00   0 migration/0
    3 root      RT   0     0    0     0 SW    0.0  0.0   0:00   1 migration/1
    4 root      15   0     0    0     0 SW    0.0  0.0   0:00   0 keventd
    5 root      34  19     0    0     0 SWN   0.0  0.0   0:00   0 ksoftirqd/0
    6 root      34  19     0    0     0 SWN   0.0  0.0   0:00   1 ksoftirqd/1
    9 root      25   0     0    0     0 SW    0.0  0.0   0:00   0 bdflush
    7 root      15   0     0    0     0 SW    0.0  0.0   0:00   1 kswapd
    8 root      15   0     0    0     0 SW    0.0  0.0   0:00   1 kscand
   10 root      15   0     0    0     0 SW    0.0  0.0   0:01   1 kupdated
   11 root      25   0     0    0     0 SW    0.0  0.0   0:00   0 mdrecoveryd

要退出 top ,按 [q] 键。

可以和 top 一起使用的互动命令包括:

命令描述
[Space] 立即刷新显示
[h] 显示帮助屏幕
[k] 杀死某进程。你会被提示输入进程 ID 以及要发送给它的信号。
[n] 改变要显示的进程数量。你会被提示输入数量。
[u] 按用户排序。
[M] 按内存用量排序。
[P] 按 CPU 用量排序。

表 42-1. 互动的 top 命令

窍门窍门
 

类似于 MozillaNautilus 的应用程序具备线程感知(thread-aware) — 多个线程会被创建来处理多个用户或多个请求,而且每个线程都有自己的 PID。按照默认设置,ps top 只显示主(初始)线程。要查看所有线程,使用 ps -m 命令或在 top 中键入[Shift] -[H] 组合键。

如果和 top 相比,你更喜欢使用图形化界面,你可以使用 GNOME 系统监视器 。要从桌面上启动它,选择面板上的「主菜单」 => 「系统工具」 => 「系统监视器」 或在 X 窗口系统的 shell 提示下键入 gnome-system-monitor 。然后选择「进程列表」 标签。

GNOME 系统监视器 允许你在正运行的进程列表中搜索进程,还可以查看所有进程、你拥有的进程、或活跃的进程。

要了解更多关于某进程的情况,选择该进程,然后点击「更多信息」 按钮。关于该进程的细节就会显示在窗口的底部。

要停止某进程,选择该进程,然后点击「结束进程」 。这有助于结束对用户输入已不再做出反应的进程。

要按指定列的信息来排序,点击该列的名称。信息被排序的那一列会用深灰色显示。

按照默认设置,GNOME 系统监控器 不显示线程。要改变这个首选项,选择「编辑」 => 「首选项」 ,点击「进程列表」 标签,然后选择「显示线程」 。首选项还允许你配置更新间隔;每个进程默认显示的信息;以及系统监视器图表的颜色。

### Linux 系统中的进程线程 #### 进程的概念 在Linux系统中,进程是一个正在运行的程序实例。每个进程都有其独立的地址空间、打开文件列表和其他状态信息[^4]。为了管理和调度这些实体,Linux内核为每一个进程维护了一个`task_struct`结构体,该结构包含了描述进程所需的各种属性。 #### 线程的概念 线程则是进程中更细粒度的任务单位,它共享所属进程内的大部分资源如内存地址空间等,但拥有自己独立的栈指针、寄存器集合以及一些局部变量[^5]。这意味着在同一应用内部可以并行执行多个不同的计算流或I/O操作而不必重复加载相同的上下文环境。 #### 主要区别 - **资源占用**: 进程具有完整的私有数据段(包括堆栈),而同一进程下的各线程间则共用了绝大部分的数据区域; - **通信成本**: 同一进程里的线程之间可以直接访问彼此的数据成员,因此它们之间的同步开销较小;相反地,跨进程通讯通常需要借助于消息队列等方式来进行交互,这增加了额外的时间消耗; - **创建销毁代价**: 新建一个子进程往往涉及复制父代的所有者权限表项等内容,所以相对耗时较长;相比之下启动新线程的速度更快因为只需要初始化少量的新对象即可[^1]。 #### 创建方式 当涉及到具体编程实践时,可以通过如下命令来分别建立新的进程线程: 对于C/C++语言来说, ```c++ #include <unistd.h> // For fork() pid_t pid; pid = fork(); // Create a child process. if (pid == 0){ printf("This is the child process.\n"); } else { wait(NULL); // Wait for the termination of the child process. } ``` 而对于POSIX标准兼容的语言,则可利用pthread库函数实现多线程开发: ```cpp #include<pthread.h> void* thread_function(void *arg){ /* Thread code here */ } int main(){ pthread_t tid; int ret=pthread_create(&tid,NULL,thread_function,(void*)NULL); if(ret!=0){ perror("Thread creation failed"); exit(EXIT_FAILURE); } pthread_join(tid,NULL); return 0; } ``` #### 调度机制 Linux采用了一套复杂的算法用于决定何时切换当前活动的工作单元—不论是进程还是线程,并赋予适当级别的CPU时间片给各个待处理的对象。值得注意的是,在一个多核心架构下,虽然单个处理器上的优先级设定仍然有效,但对于跨越不同物理芯片的情况而言,这种影响变得不再显著[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值