如何确定应用程序的进程名称?


13

这种情况:

在使用Unity快速列表编辑器(的下一个版本)上,我想添加一种“重新启动”启动器图标的可靠方法。为此,我需要删除图标(编辑gsettings)并将其替换在相同位置。到目前为止没有问题。但是,如果有问题的应用程序正在运行,则用户可能会丢失数据,因为从启动器中删除其图标后,该应用程序将退出。我需要的是找到一个应用程序的进程名,让在运行,如果应用程序正在运行的进程列表编辑器检查,并发送警告信息给用户的图标无法重新启动的可靠方法,如果该应用程序运行。

到目前为止,我所做的是使编辑器查看桌面文件,阅读命令,还阅读命令,从目录部分删除,此外,查看桌面文件命令可能引用的远程脚本,寻找开始的字符串用“ ./”

尽管该方法似乎对我测试过的所有应用程序都适用,但是我仍然觉得必须有一种更简便的方法来“一站式”解决问题。

在那儿?

也欢迎提出建议以应对更多特殊情况!


从启动器中删除其图标后,为什么应用程序会退出?退出未固定在启动器上的应用程序会导致其图标被删除,但是为什么删除该图标会退出该应用程序?
伊利亚·卡根

@Eliah:戒烟可能是不正确的表达,应用简单的崩溃....
雅各布Vlijm

@JacobVlijm那么,这是Unity特定的权利吗?Unity已经为此提供了机制。有什么要求?只知道进程名称与psxprop输出相同吗?
Sergiy Kolodyazhnyy

@Serg进程名称,从.desktop文件“计算得出” ,不一定是WM_CLASS。可以从应用程序内设置WM_CLASS。
雅各布·弗利姆

@JacobVlijm啊,假设您启动了 firefox.desktop它,它使用PID 1234启动了Firefox,但是更改WM_CLASS为“ Totally Not Firefox”之类的东西。.desktop但是该文件不会更改。您想获得附加到PID 1234的名称,而不管是否为WM_CLASS。我想我确切地知道需要做什么。但是您没有回答我的第一个问题-如果仅适用于Unity可以吗?
Sergiy Kolodyazhnyy

Answers:


3

在一般情况下,无法解决此问题。不管采用哪种机制,我都相信编写一个让您难以捉摸的过程始终是可能的,除非您首先修改了启动过程的方式以进行跟踪。

Upstart必须处理完全相同的问题以跟踪守护程序是否仍在运行,并且Upstart作业作者必须指定详细信息(派生数)以供Upstart跟踪。鉴于新贵无法在没有帮助的情况下进行管理,我也不认为可以。而且,新贵甚至可以控制流程的启动方式,我认为您不在这里。

我认为您可以做的最好的事情就是您已经在做的事情。查看/proc/<pid>/stat/proc/<pid>/cmdline是一种合理的一般方法,但仍不能解决所有情况。该pgrep命令将其包装。如果尚未使用pgrep,请查看pgrep手册页,以找到可以匹配的选项。

说了这么多,我不相信您真的首先需要这样做。如果您无法跟踪该过程,那么我也不会看到Unity如何做到这一点。更好的方法是首先消除应用程序崩溃吗?我将详细研究为什么您的应用程序崩溃(肯定是某个地方的错误?),而不是像您描述的那样尝试解决它。我想知道这是否只会影响Unity感知的应用程序,这些应用程序通过DBus调用Unity以获得更多功能


感谢您的详尽回答!我将研究细节(尤其是您的最后一段),如果找不到100%的溶液,可能会提供“重新启动”图标作为“实验”选项。好消息是,在此期间,我没有发现所用方法的异常。再次感谢!
2013年

1

xprop命令(紧跟着alt-tab进入相关的应用程序窗口,然后在窗口中单击一次)似乎对我有用。


WM_CLASS通常与流程名称匹配,但不一定匹配。定义(编码)窗口后,我可以随意指定它WM_CLASS。甚至我自己也制作了从不同进程运行的窗口,并将它们组合在一个启动器图标中。
Jacob Vlijm

哦。真可惜 最后,我值得添加免责声明“ ...似乎为我做窍门”。我真的希望将其内置到操作系统中,但是我认为我不知道该怎么做。至少,我希望“关于”中的信息。
el_gallo_azul 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.