如何通过文件名检查某个应用程序是否正在运行?

如何通过文件名检查某个应用程序是否正在运行?

我如何检查某些应用是通过文件名运行的吗?或者如果这不可能,那么是通过命令行运行的?我知道“pkill”有选项“-f”,但我不需要杀死它,只需检查一下。

更新:

我想获得肯定仅在 bash 中的应用程序,如果我不需要过滤输出来查找我想要检查其状态的应用程序的状态,则更可取。

如果这很重要,它是一个 python 或 ruby​​ 脚本,我需要检查它们两者的状态。

答案1

编辑

既然你问过如何在知道进程名称的情况下检查进程是否正在运行,那么这是一个简单的pgrep操作。或者,可以使用ps并指定state格式化选项

$ ps --no-headers -C firefox -o args,state                     
/usr/lib/firefox/firefox    R

州代码如右,从中man ps可以了解其含义:

       D    uninterruptible sleep (usually IO)
       R    running or runnable (on run queue)
       S    interruptible sleep (waiting for an event to complete)
       T    stopped, either by a job control signal or because it is
            being traced
       W    paging (not valid since the 2.6.xx kernel)
       X    dead (should never be seen)
       Z    defunct ("zombie") process, terminated but not reaped by
            its parent

原来的

大多数情况下,控制台应用程序都以自己的名称运行。如果它是一个脚本,!#顶部有一行,它将使用该行指定的解释器运行,例如 bash 脚本:

$ ps -ef | grep batmon
root      2108     1  0 22:22 ?        00:00:00 /bin/bash /home/xieerqi/bin/batmon.sh

然而,有些脚本可以充当包装器对于其他应用程序来说,例如gnome-terminal实际上是一个调用的脚本gnome-terminal.real

你总是把一个应用程序放到后台,它会告诉你该进程的 pid

$ bin/batmon.sh &                                              
[1] 3224

然后您可以使用kill PID(例如此处kill 3224)直接关闭应用程序,或者使用ps查找其名称:

$ ps --no-headers -p 3224 -o %a                                
/bin/bash bin/batmon.sh

通常,可以搜索不带(代表全名)pkill的名称。您还可以使用以下方式进行搜索:-fpgrep appNamePartial

答案2

如果您想实时跟踪进程,可以使用著名的命令:

top

但是您希望通过文件名获取它,因此您需要添加一个参数:

top -c

相关内容