Linux - 通过路径结束进程

10

如何通过可执行文件的绝对路径杀死一个进程?因此,我想要杀死所有从给定位置创建的可执行文件所产生的进程。

回答:

kill $(ps aux | grep '<absolute executable path>' | awk '{print $2}')

2
https://dev59.com/vXA75IYBdhLWcg3wBkS1 - Corey Goldberg
谢谢,这帮了很多。已经用答案更新了我的问题。 - goocreations
4个回答

3
function killpath {
    ps aux |  awk '{print $2"\t"$11}' | grep -E '^\d+\t'"$1"'$' | awk '{print $1}' | xargs kill -SIGTERM
}

使用方法:

killpath /Applications/Waterfox.app/Contents/MacOS/waterfox

最初的回答:

功能:

  • ps aux:列出进程
  • awk '{print $2"\t"$11}':获取第 2 列(PID)和第 11 列(可执行文件),并用一个 \t 制表符分隔它们
  • grep -E '^\d+\t'"$1"'$':匹配正则表达式
    • ^:行开头
    • \d+:一个或多个数字
    • \t:之前介绍过的制表符
    • "$1" 函数的输入,例如:/Applications/Waterfox.app/Contents/MacOS/waterfox
    • $:行结尾
  • awk '{print $1}':只获取第 1 列,也就是进程 ID。
  • xargs:将换行符转换为空格

以下是数据的示例:

# killpath /Applications/Waterfox.app/Contents/MacOS/waterfox

# ps aux
# USER           PID    %CPU %MEM  VSZ     RSS       TT  STAT STARTED   TIME     COMMAND
luckydonald      23265  04,6 10,3  9222008 1736020   ??  S    Sat10am   45:48.77 /Applications/Waterfox.app/Contents/MacOS/waterfox -foreground
luckydonald      23266  02,0 05,3  5743400  362344   ??  R    Sat10am   11:52.52 /Applications/Waterfox.app/Contents/MacOS/waterfox -foreground
luckydonald      42128  04,5 00,2  4337884   35608 s002  S+    1:17am    0:06.84 /usr/local/Cellar/docker-compose/1.23.2/libexec/bin/python3.7 /usr/local/bin/docker-compose logs -f --tail 100 r2tg

# awk '{print $2"\t"$11}'
23265   /Applications/Waterfox.app/Contents/MacOS/waterfox
23266   /Applications/Waterfox.app/Contents/MacOS/waterfox
42128   /usr/local/Cellar/docker-compose/1.23.2/libexec/bin/python3.7

# 1="/Applications/Waterfox.app/Contents/MacOS/waterfox"
# grep -E '^\d+\t'"$1"'$'
23265   /Applications/Waterfox.app/Contents/MacOS/waterfox
23266   /Applications/Waterfox.app/Contents/MacOS/waterfox

#  awk '{print $1}'
23265
23266

# xargs
23265 23266

# xargs kill -SIGTERM
kill -SIGTERM 23265 23266

3

答案:

kill $(pgrep -f /absolute/executable/path)

1

0

在搜索了很多之后,没有找到任何有效的解决方案。 我解决了我的问题,也许对你有用。

如果有多个具有相同名称但不同位置的应用程序,那么首先通过提供完整路径来找出进程ID。 假设有两个正在运行的应用程序,它们的位置分别是:

  1. /home/ubuntu/Sachin/printMsg
  2. /home/ubuntu/Sachin/second/printMsg

(printMsg是应用程序的名称。) 如果我们想关闭第一个应用程序,可以使用以下命令:

kill $(pidof "/home/ubuntu/Sachin/printMsg")

解释:

命令pidof "/home/ubuntu/Sachin/printMsg"返回进程ID。使用该进程ID,我们可以使用kill命令关闭应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接