Альтернативы pgrep и pkill на Mac OS X?

23

Существуют ли альтернативы pgrepи pkillкоманды в Mac OS X или я должен просто создать для них псевдонимы, используя другие доступные мне команды?

Eimantas
источник

Ответы:

11

Вы можете использовать MacPorts :sudo port install proctools

Вот результат port search pgrep:

proctools @0.4pre1 (sysutils)
    pgrep, pkill and pfind for OpenBSD and Darwin (Mac OS X)
Ricket
источник
3
proctools также доступен через Homebrew
Эндрю Маршалл
@AndrewMarshall прав. Для доморощенного попробуйтеbrew install proctools
cwd
18

На OS X Lion с домашним пивом :

$ brew install proctools

Это загружает, строит и устанавливает pgrep, pkillи pfind.

Джо Уолп
источник
Будет ли возможно построить графический интерфейс для работы так, как это делает xkill, но для OSX
Jonas Oestman
11

Вам больше не нужна альтернатива: начиная с MacOS 10.8 pgrepи pkillдоступны по умолчанию.

Удар
источник
10

Предполагая, что вы используете сравнительно недавнюю версию Bash на Mac, вы можете написать свою собственную версию pgrepкак функцию, а затем добавить ее в свой .bashrcфайл:

function pgrep() {
    ps aux | grep $1 | grep -v grep
}

Что касается pkillвы можете использовать следующее:

function pkill() {
    local pid
    pid=$(ps ax | grep $1 | grep -v grep | awk '{ print $1 }')
    kill -9 $pid
    echo -n "Killed $1 (process $pid)"
}
λ Йонас Гораускас
источник
Я на Z Shell, хотя не должно быть никаких проблем в адаптации этого.
Eimantas
1
или / bin / kill $ (ps ax | awk '$ 5 ~ /' "$ 1" '/ {print $ 1}') для более точного pgrep (только имя процесса, а не аргументы. Я использую / bin / kill по привычке, потому что Надежно требуется более одного PID, чтобы убить. Существуют и другие приемы, если вы контролируете регулярное выражение, чтобы вам никогда не приходилось 'grep -v grep' - таким образом вы можете pkill greps!)
jrg
Я предлагаю вам удалить functionключевое слово, оно устарело. Смотрите это сообщение
SiegeX
Ты обалденный.
Биджан
2

Proctools включает pgrepи pkillдоступен для OpenBSD и OSX. Это не было обновлено некоторое время, но это все еще должно работать (по крайней мере на OSX, который редко изменяет его ABI).

Жиль "ТАК - перестань быть злым"
источник
Proctools плохо компилируется со Snow Leopard
1

Вы могли бы попробовать killall. Это убивает процессы по имени. Любые процессы, соответствующие строке, которую вы передаете, уничтожаются.

killall httpd ( kill all apache processes )
killall php ( kill all php process )

Если вы делаете

killall -s man ( kill any manual page processes, if a user is using man [command]

он покажет вам список процессов, которые будут убиты, как показано ниже.

kill -TERM 70836

Если вы хотите другой сигнал, сделайте следующее

killall -9 processname
Джерри Саравиа
источник
1

Это было мое решение для pkill:

#!/bin/sh

for X in `ps acx | grep -i $1 | awk {'print $1'}`; do
    kill -9 $X;
done
Райан Томас Коррейя Ортега
источник