grep에 적중된 모든 프로세스를 종료하기 위한 별칭 [중복]

grep에 적중된 모든 프로세스를 종료하기 위한 별칭 [중복]

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, --정규식

프로세스 이름 패턴을 확장 정규식으로 해석합니다.

(killall(1)매뉴얼 페이지)

답변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
}

관련 정보