从 ps -ef grep 获取进程 ID(或在删除应用程序之前停止它)

从 ps -ef grep 获取进程 ID(或在删除应用程序之前停止它)

我有一个 rpm,我想在卸载时检查我的应用程序是否正在运行,如果运行卸载之前停止它。
我的服务在特定用户下运行。如何在 rpm spec 中使用 bash 执行此操作?
即我如何知道我的服务正在运行,以便我可以停止它?

更新: 如果我这样做,ps -ef|grep myUser我怎样才能从结果中获取进程 ID,以便我可以这样做kill -9

答案1

你可以做

ps -U someUserName -o pid,comm | awk '/someProcessName/{print $1}'

(编辑了我的答案,并从我的答案中摘取了上面的内容你的相关问题)或类似 [1],甚至更好

pgrep -u myuser mybinaryname

获取进程 ID,或者甚至更简单

pkill -u myuser mybinaryname

直接终止该进程。

进行一些测试来确定二进制名称并确保它不会与其他进程冲突。

pgrep并且pkill很可能已经安装在您的系统上。否则它们(在基于 Debian 的系统上)在包中procps)。


请注意,普通用户很可能没有权限终止其他用户的进程,因此pkill mybinaryname需要以提升的权限运行。这听起来像是 root 运行的脚本(因为它正在卸载程序),所以这可能不是问题。


[1]:awk通过折叠前导空格来选择第一个非空白字段,如果 pid <10000 就会出现(在我的系统上,因为 pidmax 是 32767),这会造成混淆cut

答案2

ps wp PID|grep PID

如果没有 grep 您就无法做到这一点 - 您会发现使用 grep 您可以删除标题..

相关内容