grep 일치와 일치하는 모든 프로세스를 종료하기 위해 superkill 별칭을 만들려고 합니다. 나하고 싶어:
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
루비 프로세스가 여전히 존재하는 것을 볼 수 있습니다. 하지만 만약 그렇게 한다면
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
}