目前在Linux中运行应用程序

时间:2012-05-31 17:28:07

标签: linux multiprocessing netbeans-7 opensuse suse

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

回到你想要解决的问题:从我的观点来看,有两种方法可以尝试:

  1. 构建一个数据库,其中包含进程名称与应用程序的关联,并使用它来使用ps创建应用程序列表。
  2. 您可以将应用程序限制为仅列出显示图形用户界面的应用程序。这个列表应该可以通过使用一些X11函数或类似函数来轻松构建......
  3. 希望这会有所帮助...

答案 1 :(得分:1)

你有没有尝试 pstree ?这会显示一个正在系统上运行的进程的树。

htop 是我通常用于多核环境的原因,因为它显示了资源利用率,您可以通过添加列来查看您的流程的固定位置。 htop比顶级用户更友好,有更多选择。当你运行它时,只需点击' t ',它将按父母对进程进行排序。

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

我希望它有所帮助。

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

答案 2 :(得分:0)

查看top(linux命令)

本文将为您提供很多帮助。 http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html

答案 3 :(得分:0)

您可能希望从xlsclients开始。

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

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