获取正在运行的进程和应用程序的列表

西格德桑乔格

使用终端命令登录后,如何查看最近正在运行的应用程序和进程。

雅各布·弗利姆(Jacob Vlijm)

以下脚本列出了所有进程,并将它们拆分为应用程序其他进程

作为应用程序的定义,我练习从一个.desktop文件启动该过程(因为实际上所有应用程序都由一个.desktop文件表示),并且该.desktop文件显示在Dash中(.desktop文件没有行:)NoDisplay=true

要做的工作:

脚本实际上是从桌面文件中找到的命令的(-的最后一部分)以及它可能引用的可能符号链接中找到的信息中得出应用程序的过程名称的(例如,LibreOffice> process的情况下)名称:)soffice.bin但是,在某些情况下,应用程序是从.desktop文件中调用的远程脚本运行的在这些情况下,该过程将不会被视为应用程序。

该脚本给出如下输出:

Processes, related to applications:
  PID TTY          TIME CMD
 1933 ?        00:03:55 firefox
18091 ?        00:00:00 dia
18162 ?        00:00:01 soffice.bin
31167 ?        00:00:06 alarm-clock-app
31174 ?        00:00:09 nautilus
31301 ?        00:00:20 dropbox
31998 ?        00:01:35 idle3

Other processes:
  PID TTY          TIME CMD
    1 ?        00:00:01 init
    2 ?        00:00:00 kthreadd
    3 ?        00:00:02 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:00:15 rcu_sched
    8 ?        00:00:08 rcuos/0

等等...

剧本

#!/usr/bin/env python3

import os
import subprocess

def createlist_appcommands():
    dtfile_dir = "/usr/share/applications"
    dtfile_list = [item for item in os.listdir(dtfile_dir) if item.endswith(".desktop")]
    commands = []
    for item in dtfile_list:
        try:
            with open(dtfile_dir+"/"+item) as data:
                searchlines = data.readlines()
                command = [line for line in searchlines if line.startswith("Exec=")
                           and not "NoDisplay=true\n" in searchlines
                            ][0].replace("Exec=", "").replace("\n", "").split("/")[-1].split(" ")[0]
            commands.append(command)
        except Exception:
            pass
    return commands + [trace_symlinks(item) for item in commands if not trace_symlinks(item)== None]

def trace_symlinks(command):
    target = subprocess.Popen(["which", command], stdout=subprocess.PIPE)
    location = (target.communicate()[0].decode("utf-8")).split("\n")[0]                                                          
    check_filetype = subprocess.Popen(["file", location], stdout=subprocess.PIPE)
    filetype = (check_filetype.communicate()[0].decode("utf-8")).split("\n")[0]
    if "symbolic link" in filetype:
        return filetype.split("/")[-1].replace("' ", "")
    else:
        pass

def createlist_runningprocs():
    processesb = subprocess.Popen(["ps", "-e"], stdout=subprocess.PIPE)
    process_listb = (processesb.communicate()[0].decode("utf-8")).split("\n")
    linked_commands = [(item, item[24:]) for item in process_listb][1:]
    applist = createlist_appcommands()
    print("Processes, related to applications:\n  PID TTY"+" "*10+"TIME CMD")
    matches = []
    for item in applist:
        for i in range(0, len(linked_commands)):
            if item[:15] in linked_commands[i][1] and len(item[:15])/len(linked_commands[i][1]) > 0.5:
                matches.append(i)
    matches = sorted(matches)
    for i in range(0, len(linked_commands)):
        if i in matches:
            print(linked_commands[i][0])
    print("\nOther processes:\n  PID TTY"+" "*10+"TIME CMD")
    for i in range(0, len(linked_commands)):
        if not i in matches:
            print(linked_commands[i][0])

createlist_runningprocs()

如何使用

将脚本复制到一个空文件中,另存为processes.py,然后通过以下命令运行该脚本

python3 /path/to/processes.py

编辑:更新了我的答案,重写了脚本。

改进之处:

  • (很多)更好的性能

  • 脚本现在可以跟踪和识别通过符号链接(可能具有另一个进程名称)启动的应用程序。尽管例外总是可能的,但现在应该很少见了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从 Java 应用程序获取 Linux 中正在运行的进程的准确列表?

来自分类Dev

Applescript获取正在运行的应用程序列表?

来自分类Dev

在命令行OSX中返回正在运行的应用程序(不是进程)的列表

来自分类Dev

使用JXA获取所有正在运行的全屏应用程序(或空间)的列表

来自分类Dev

如何获取Unity Launcher中正在运行的GUI应用程序的列表?

来自分类Dev

如何使用命令行获取正在运行的应用程序的列表?

来自分类Dev

使用Java获取正在运行的应用程序的名称

来自分类Dev

获取正在运行的进程列表

来自分类Dev

如何在 WPF 应用程序组合框/ ListView 上动态加载正在运行的进程列表?

来自分类Dev

获取从当前正在运行的进程派生的进程列表?

来自分类Dev

COM Server应用程序和GetObject-重用正在运行的应用程序

来自分类Dev

Mac OSX-获取所有正在运行的应用程序列表以及内存使用情况

来自分类Dev

检查应用程序是否正在运行,而不是作为后台进程

来自分类Dev

如何使用python3查找正在运行的应用程序的进程ID

来自分类Dev

Android Notification是否打开当前正在运行的应用程序,而不是创建新进程?

来自分类Dev

VBA获取正在运行的进程的程序名称和任务ID

来自分类Dev

获取正在运行的特定进程的刷新列表

来自分类Dev

获取 t-sql 中正在运行的进程列表

来自分类Dev

使用 PHP 获取正在运行的进程列表

来自分类Dev

Android Studio正在运行的应用程序后台运行

来自分类Dev

无法终止正在运行的程序/应用程序

来自分类Dev

如何在Office 2013的应用程序中获取当前正在运行的应用程序的名称

来自分类Dev

获取正在运行的进程的用户和内核时间?

来自分类Dev

Android获取当前正在运行的应用程序包名称

来自分类Dev

获取正在运行的应用程序的自定义状态

来自分类Dev

如何在Android 5.0(L)中获取正在运行的应用程序活动名称?

来自分类Dev

如何在Windows中获取正在运行的应用程序?

来自分类Dev

在OS X中以编程方式获取正在运行的应用程序捆绑包

来自分类Dev

如何获取正在运行的图标的应用程序并保存在Array_list中?

Related 相关文章

  1. 1

    如何从 Java 应用程序获取 Linux 中正在运行的进程的准确列表?

  2. 2

    Applescript获取正在运行的应用程序列表?

  3. 3

    在命令行OSX中返回正在运行的应用程序(不是进程)的列表

  4. 4

    使用JXA获取所有正在运行的全屏应用程序(或空间)的列表

  5. 5

    如何获取Unity Launcher中正在运行的GUI应用程序的列表?

  6. 6

    如何使用命令行获取正在运行的应用程序的列表?

  7. 7

    使用Java获取正在运行的应用程序的名称

  8. 8

    获取正在运行的进程列表

  9. 9

    如何在 WPF 应用程序组合框/ ListView 上动态加载正在运行的进程列表?

  10. 10

    获取从当前正在运行的进程派生的进程列表?

  11. 11

    COM Server应用程序和GetObject-重用正在运行的应用程序

  12. 12

    Mac OSX-获取所有正在运行的应用程序列表以及内存使用情况

  13. 13

    检查应用程序是否正在运行,而不是作为后台进程

  14. 14

    如何使用python3查找正在运行的应用程序的进程ID

  15. 15

    Android Notification是否打开当前正在运行的应用程序,而不是创建新进程?

  16. 16

    VBA获取正在运行的进程的程序名称和任务ID

  17. 17

    获取正在运行的特定进程的刷新列表

  18. 18

    获取 t-sql 中正在运行的进程列表

  19. 19

    使用 PHP 获取正在运行的进程列表

  20. 20

    Android Studio正在运行的应用程序后台运行

  21. 21

    无法终止正在运行的程序/应用程序

  22. 22

    如何在Office 2013的应用程序中获取当前正在运行的应用程序的名称

  23. 23

    获取正在运行的进程的用户和内核时间?

  24. 24

    Android获取当前正在运行的应用程序包名称

  25. 25

    获取正在运行的应用程序的自定义状态

  26. 26

    如何在Android 5.0(L)中获取正在运行的应用程序活动名称?

  27. 27

    如何在Windows中获取正在运行的应用程序?

  28. 28

    在OS X中以编程方式获取正在运行的应用程序捆绑包

  29. 29

    如何获取正在运行的图标的应用程序并保存在Array_list中?

热门标签

归档