我有一个名为processKiller
的非常小的脚本,它会在正在运行的服务上给定部分名称匹配时终止进程。
现在,我有我的剧本:
ARG=$1
sudo pkill -f $ARG -9
这很有效。它只是打印killed
,无论它是否会杀死。但是,如果能够找到具有部分匹配的进程,我希望能够将var设置为用户的输入。所以说我有一个名为MyProcess-01-02
的进程,用户在他们的cmd行中键入:
processKiller.sh MyPro
我希望输出:
被杀:MyProcess-01-02
我想到了类似的东西,但它没有正确设置变量。有任何想法吗?
ARG=$1
SERVICE = -f $ARG
sudo pkill -f $SERVICE -9
echo "Killed: $SERVICE"
此外,如果发现只有在确实已经在运行的情况下才会发现对SERVICE变量进行“if”检查会有什么办法吗?
答案 0 :(得分:2)
您可以使用-e
的{{1}}选项来显示被杀的内容:
pkill
示例:
pattern=$1
pkill -e -9 "$pattern" # Remember to quote your arguments
如果您不喜欢此输出格式,可以使用pkill -e xyz
xyz killed (pid 8105)
xyz killed (pid 8109)
xyz killed (pid 8110)
xyz killed (pid 8111)
xyz killed (pid 8112)
xyz killed (pid 8113)
xyz killed (pid 8114)
xyz killed (pid 8115)
xyz killed (pid 8116)
进行更改:
sed
答案 1 :(得分:0)
一种可能的方法是这样的:
#!/bin/bash
#get the argument
processNameToFind="$1"
#find any process lines with that name
processLines=$(ps o pid,command | grep "$processNameToFind" | grep -v "$0" | grep -v "grep")
#let's see if we found something
if [ -n "$processLines" ]
then
#we may have found multiple processes running
while read -r pid processName
do
#kill it
sudo kill -9 "$pid"
echo "Killed: $processName"
done <<< "$processLines"
else
echo "No process was found with the name: $processNameToFind"
fi
需要注意几点:
编辑:更新了Charles Duffy的提示