grep一致に一致するすべてのプロセスを終了するためにスーパーキルエイリアスを作成しようとしています。私がしたい:
superkill ruby
「ruby」に一致するすべてのプロセスを終了させます。
私は.bashrcにこれを追加しました。
alias superkill="ps ax | grep $1 | cut -f1 -d' ' | xargs kill"
ただし、実行すると、次のような結果が表示されます。
superkill something
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
...
誰もが正しい方向に私を指すことができますか?
ありがとう、ケビン
これはコピーとは異なります。具体的な質問をさせていただきます。重複は一般的で高レベルの問題です。コピーを読んでも解決策は思い出されません。
pkill -f
動作しません。そうすれば
ps -A|grep ruby
それから
pkill -f ruby
それから
ps -A|grep ruby
Rubyプロセスがまだ存在することがわかります。しかし、もしそうするなら
kill -9 xxx
xxxがPIDの場合は機能します。私が探しているのは、grepエントリと一致するエイリアスkill -9です。
アップデート - これはSOに対する私の欲求不満を思い出させます。誰もがすぐに反対票を投げたり報告したりします(報告する価値がほとんどないと思います)。提案された答えのどれも機能しない別の例は次のとおりです。
kevin@kpi-2:~/Documents/code/kpi-veh$ sudo killall -r ruby
kevin@kpi-2:~/Documents/code/kpi-veh$ ps -A|grep ruby
27175 pts/9 00:22:03 ruby
kevin@kpi-2:~/Documents/code/kpi-veh$ sudo killall -r ruby
kevin@kpi-2:~/Documents/code/kpi-veh$ ps -A|grep ruby
27175 pts/9 00:22:06 ruby
kevin@kpi-2:~/Documents/code/kpi-veh$ sudo killall -r ruby
kevin@kpi-2:~/Documents/code/kpi-veh$ ps -A|grep ruby
27175 pts/9 00:22:08 ruby
kevin@kpi-2:~/Documents/code/kpi-veh$ kill -9 27175
kevin@kpi-2:~/Documents/code/kpi-veh$
私が探しているのは(これが詐欺だとロビーモニターと論争をしていることをまだ信じられない)エイリアスキル方法です。この場合(Rubyで頻繁に発生する)、IDでプロセスを終了する必要があります。私が知っている限り、すべてのバリエーションでkillallは機能しません。
答え1
探しているアイテムはすでに次の名前で存在しますkillall -r
。
killall
指定されたコマンドを実行するすべてのプロセスにシグナルを送信します。信号名が指定されていない場合にSIGTERM
送信されます。 [...]-r、--正規表現
プロセス名パターンを拡張正規表現として解釈します。
答え2
エイリアスには位置パラメータを使用できません。
このエイリアスを使用して実行するコマンドは次のとおりです。
ps ax | grep | cut -f1 -d' ' | xargs kill something
関数で作成する必要があります。
コードよりはるかに長いですが、以下は私が使用している同様の機能です。
smash () {
local T_PROC=$1
local T_PIDS=($(pgrep -i "$T_PROC"))
if [[ "${#T_PIDS[@]}" -ge 1 ]]; then
echo "Found the following processes:"
for pid in "${T_PIDS[@]}"; do
echo "$pid" "$(ps -p "$pid" -o comm= | awk -F'/' '{print $NF}')" | column -t
done
if ( yorn.ask "Kill them?" ); then
for pid in "${T_PIDS[@]}"; do
echo "Killing ${pid}..."
( kill -15 "$pid" ) && continue
sleep 2
( kill -2 "$pid" ) && continue
sleep 2
( kill -1 "$pid" ) && continue
echo "What the hell is this thing?" >&2 && return 1
done
else
echo "Exiting..."
return 0
fi
else
echo "No processes found for: $1" >&2 && return 1
fi
}
yorn.ask
私が使用する別の機能は次のとおりです。
yorn.ask () {
read -p "$@ [Y/n]: " RESP && local YORN_RESP="$(echo "${RESP:0:1}" | grep -i "[YN]")"
while [[ -z "$YORN_RESP" ]]; do
echo "Please respond only with: y or n"
read -p "$@ [Y/n]: " RESP && local YORN_RESP="$(echo "${RESP:0:1}" | grep -i "[YN]")"
done
[[ "$YORN_RESP" == 'Y' || "$YORN_RESP" == 'y' ]] && return 0 || return 1
}