当前在Linux中运行的应用程序

当前在Linux中运行的应用程序,linux,multiprocessing,netbeans-7,opensuse,suse,Linux,Multiprocessing,Netbeans 7,Opensuse,Suse,我正在做一个类似于Linux中我们称之为system monitor的项目。我正在使用opensuse 11.4 gnome。我想知道是否有任何命令(ps除外)列出了系统上当前运行的所有应用程序。我正在为多核环境开发它 例如,我用Firefox浏览网页,比如说同时使用Google Chrome,再加上我在编辑文本文件中的文本。在这个场景中,当我打开我的项目时,我希望当前运行的所有应用程序的列表[在我的场景中,名称gEdit、Google Chrome和Firefox(但不是这三个应用程序生成的过

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

例如,我用Firefox浏览网页,比如说同时使用Google Chrome,再加上我在编辑文本文件中的文本。在这个场景中,当我打开我的项目时,我希望当前运行的所有应用程序的列表[在我的场景中,名称gEdit、Google Chrome和Firefox(但不是这三个应用程序生成的过程)必须显示为列表]

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

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

签出top(linux命令)

这篇文章会给你很多帮助。

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

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 localhost:~#ps-ef | grep后缀 根3708 1 0 4月24日?00:00:35/usr/lib/postfix/master 后缀37483708024年4月0日?00:00:01 qmgr-l-t fifo-u 后缀37493708024年4月0日?00:00:00取货-l-t先进先出-u-c 后缀135043708016:05?00:00:00清理-z-t unix-u-c 后缀154583708017:45?00:00:00清理-z-t unix-u-c 后缀199073708019:25?00:00:00清理-z-t unix-u-c 进程“master”、“qmgr”、“pickup”和“cleanup”都属于应用程序后缀。通过查看第三列,您可以看到这些进程都属于一个父进程“master”,该列告诉您启动此进程的父进程。在我的示例中,所有进程都是由id为3708的进程启动的。另一个例子是ApacheWebServer,它在启动时创建几个httpd进程——这里的进程名称都是相同的,只是数量根据配置而不同

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

  • 建立一个数据库,其中包含进程名称与应用程序的关联,并使用此数据库使用ps创建应用程序列表
  • 您将应用程序限制为仅列出显示图形用户界面的应用程序。通过使用一些X11函数或类似的函数,可以轻松创建此列表

  • 希望这有帮助…

    您可以从
    xlsclients
    开始

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

    接下来您可能会发现有用的是
    xprop
    (查找
    \u NET\u WM\u PID
    ),但这并不能保证适用于所有程序。

    您尝试过pstree了吗?这显示了系统上运行的进程树

    htop是我通常在多核环境中使用的,因为它显示了资源利用率,通过添加列,您可以看到进程固定在何处。htop比top更容易使用,并且有更多的选项。当您运行它时,只需点击“t”,它就会按进程的父进程对进程进行排序

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

    我希望有帮助


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

    请下次询问superuser.com。为什么您不能使用ps?还要注意的是,Windows“应用程序”与linux“进程”不同,因此您不可能得到一个在所有情况下都能完全按照您希望的方式工作的解决方案。但我想要一种只显示当前运行的应用程序(如chrone Etchies Saman Barghi)名称的方法,我只需要父进程。命令应该是什么?虽然我使用的是opensuse11.4,但Saman Barghi htop没有在我的Linux上运行:(试试这个,如果有用请告诉我:
    pstree | awk'{print$1}“|sed's/^ |//g”| sed-e'/^$/d'-e's/^-//g'
    它列出了所有的父进程。您可以添加更多的筛选选项并根据需要进行更改。您是否使用htop的默认opensuse包?您是否尝试过构建源代码。从这里获取:非常感谢@saman Barghi。它非常有用。非常感谢。