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

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

情况如下:

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

到目前为止,我所做的是让编辑器查看桌面文件,读取命令,还读取从目录部分剥离的命令,并进一步查看桌面文件命令可能引用的可能的远程脚本,查找以“。/”开头的字符串

尽管该方法似乎在我测试过的所有应用程序上运行良好,但我觉得一定有一种更简单的方法可以“一体化”地解决问题......

有没有?

也欢迎提出建议来捕捉更多特殊情况!

答案1

一般情况下,没有办法解决这个问题。无论你提出什么机制,我相信你总是有可能编写一个让你无法理解的进程,除非你首先修改进程的启动方式,以便以这种方式跟踪它们。

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

我认为你能做的最好的就是你已经在做的事情。查看/proc/<pid>/stat/proc/<pid>/cmdline是一种相当通用的方法,但仍然无法捕捉到所有的情况。该pgrep命令会包装它。如果你还没有使用pgrep,请查看pgrep 手册页寻找你可以匹配的事物的选项。

话虽如此,我并不认为你真的需要这样做。如果你无法跟踪这个过程,那么我也不明白 Unity 如何做到这一点。更好的方法难道不是首先消除应用程序崩溃吗?我会详细研究应用程序崩溃的原因(肯定是某个地方有错误?),而不是像你描述的那样试图解决它。我想知道这是否只影响回调 Unity 的 Unity 感知应用程序通过 DBus 实现额外功能

答案2

xprop命令(随后按 alt-tab 转到相关应用程序窗口,然后在窗口中单击一次)似乎对我有用。

相关内容