killall & pkill 找不到 运行 属于我的守护进程

killall & pkill can't find a daemon that is running and belongs to me

我经常发现鼠标无法滚动。解决方法是通过 Activity 监视器退出 Logi Options Daemon。我想使用 shell 脚本来执行此操作,以便我可以分配热键,但我不知道如何按名称终止进程。

➜  ~ killall "Logi Options Daemon"
No matching processes belonging to you were found
➜  ~ sudo killall "Logi Options Daemon"
Password:
No matching processes were found
➜  ~ sudo killall -9 "Logi Options Daemon"
No matching processes were found
➜  ~ pkill -f "Logi Options Daemon"
➜  ~ pgrep -f "Logi Options Daemon"

如果我运行 ps | grep "Logi Options Daemon",我每次都会得到不同的PID,但是Activity Moniter 中的PID 并没有改变。将 kill 与来自 Activity 监视器的 ID 一起使用,确实会终止进程,但违背了使用脚本的目的。

如何让这个进程死掉?

根据this blog post from Chris Pennington,程序的实际名称是LogiMgrDaemon,所以试试:

killall LogiMgrDaemon

您可以在 Activity 监视器中找到此名称,方法是选择进程,打开其信息 window(使用 Command-I 或工具栏中的“I”按钮),并在“打开文件和端口”选项卡下查找二进制名称和路径。

至于您在 运行 ps | grep "Logi Options Daemon" 时看到的内容,您可能只是看到了 grep 过程本身。请注意此处列出的进程中的“grep”:

$ ps | grep "No Such Daemon"
36074 ttys006    0:00.00 grep No Such Daemon

这是 ps | grep 的一个极其常见的问题,这几乎是 pgrep 作为一个单独的程序存在的全部原因。