Mac OS X上的pgrep和pkill替代品?


23

Mac OS X上是否有替代方法pgreppkill命令,还是应该使用其他可用命令为它们创建别名?

Answers:


11

您可以使用MacPortssudo port install proctools

结果如下port search pgrep

proctools @0.4pre1 (sysutils)
    pgrep, pkill and pfind for OpenBSD and Darwin (Mac OS X)

3
proctools也可以通过自制软件
安德鲁·马歇尔

@AndrewMarshall是正确的。对于自制酒,请尝试brew install proctools
cwd


11

你并不需要一个替代了:因为MacOS的10.8 pgreppkill默认情况下可用。


10

假设您在Mac中使用的是相对较新版本的Bash,则可以编写自己的pgrepas函数版本,然后将其添加到.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(仅进程名,而不是args。出于习惯,我使用/ bin / kill是因为它确实需要多个PID才能杀死。还有其他技巧,如果您可以控制正则表达式,则不必使用'grep -v grep'-这样您就可以杀死垃圾!)
jrg

我建议您删除该function关键字,不建议使用。看到这个帖子
SiegeX'1

你真棒。
Bijan

2

Proctools包括pgreppkill可用于OpenBSD和OSX。它已经有一段时间没有更新了,但是仍然可以正常工作(至少在很少修改其ABI的OSX上)。


Proctools不能与Snow Leopard很好地进行编译

1

您可以尝试杀死所有。它按名称杀死进程。与您传入的字符串匹配的所有进程都会被杀死。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.