我有一个很小的脚本,名为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"此外,是否有任何方法来运行" if“检查服务变量,一旦发现只有当它确实已经在运行时才会终止它?
发布于 2018-01-21 13:35:17
您可以使用-e选项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更改它
pkill -e -9 "$pattern" | sed -re 's/^(\S+).*/Killed: \1/'发布于 2018-01-21 13:30:53
一种可能的方法可以是这样:
#!/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有几点需要注意:
编辑:用查尔斯·达菲的贴士更新
https://stackoverflow.com/questions/48330543
复制相似问题