2

我正在做一个类似于我们在 Linux 中称为系统监视器的项目。我正在使用opensuse 11.4 gnome。我想知道是否有任何命令(除了 ps)列出了系统上所有当前正在运行的应用程序。我正在为多核环境开发它。

例如,我正在使用 Firefox 浏览网页并同时说 Google Chrome,另外我正在编辑文本文件中的文本。在这种情况下,当我打开我的项目时,我想要当前运行的所有应用程序的列表[在我的场景中,名称 gEdit、Google Chrome 和 Firefox(但不是这三个应用程序生成的进程)必须显示为列表]

我想要的输出与我们在 Windows 中使用任务管理器时在“应用程序”选项卡中得到的输出相同。

如果有人有解决方案,请告诉我,我们将不胜感激。我正在使用 netbeans 来实现该项目。谢谢!!!

4

4 回答 4

2

我认为没有一种简单的方法可以完成这项工作。在 Linux 中,应用程序可能会在启动时创建多个进程 - 例如让我们使用后缀:

localhost:~ # ps -ef|grep 后缀
 根 3708 1 0 Apr24 ?00:00:35 /usr/lib/postfix/master
 后缀 3748 3708 0 Apr24 ?00:00:01 qmgr -l -t fifo -u
 后缀 3749 3708 0 Apr24 ?00:00:00 拾取 -l -t fifo -u -c
 后缀 13504 3708 0 16:05 ? 00:00:00 清理 -z -t unix -u -c
 后缀 15458 3708 0 17:45 ? 00:00:00 清理 -z -t unix -u -c
 后缀 19907 3708 0 19:25 ? 00:00:00 清理 -z -t unix -u -c

进程“master”、“qmgr”、“pickup”和“cleanup”都属于应用程序后缀。通过查看第三列,您可以看到这些进程每个都属于一个父进程“主”,该列告诉您启动该进程的父进程。在我的示例中,所有进程都由 id 3708 的进程启动。另一个示例是 Apache Webserver,它在启动时创建多个 httpd 进程 - 这里进程名称都是相同的,只是计数因配置而异。

回到您想解决的问题:从我的角度来看,您可以尝试两种方法:

  1. 建立一个数据库,其中包含进程名称与应用程序的关联,并使用它来使用 ps 创建您的应用程序列表。
  2. 您将应用程序限制为仅列出显示图形用户界面的应用程序。这个列表应该很容易通过使用一些 X11 函数或类似的东西来构建......

希望这可以帮助...

于 2012-05-31T18:01:31.703 回答
1

你试过pstree了吗?好吧,这向您显示了系统上正在运行的进程的树。

htop是我通常用于多核环境的,因为它显示资源利用率,您可以通过添加列来查看进程的固定位置。htop 比 top 更加用户友好并且有更多的选择。当您运行它时,只需点击“ t ”,它就会按其父进程对进程进行排序。

我不知道任何其他工具,但您的另一个选择是通过/proc并编写您自己的脚本来提取您需要的信息。

我希望它有所帮助。

编辑:我忘了提到进程在linux中被分叉,所以有一个父进程启动了几个其他进程/线程。从您的问题来看,您似乎正在尝试为每个正在运行的进程查找父进程,我的回答是基于该假设。

于 2012-05-31T20:47:11.627 回答
0

查看顶部(linux 命令)

这篇文章会对你有很大帮助。 http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html

于 2012-05-31T17:30:19.760 回答
0

您可能想从xlsclients.

它可能没有您需要的所有功能,但是 Linux 没有明确定义的应用程序概念。

您可能会发现有用的下一件事是xprop(查找_NET_WM_PID),但这并不保证适用于所有程序。

于 2012-05-31T18:08:27.677 回答