ทางเลือก pgrep และ pkill บน mac os x?


23

มีทางเลือกpgrepและpkillคำสั่งบน Mac OS X หรือฉันควรสร้างนามแฝงแทนพวกเขาโดยใช้คำสั่งอื่น ๆ ที่มีให้สำหรับฉัน

คำตอบ:


11

คุณสามารถใช้MacPorts :sudo port install proctools

นี่คือผลลัพธ์ของport search pgrep:

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

3
proctools มีให้บริการผ่านHomebrew
Andrew Marshall เมื่อ

@AndrewMarshall ถูกต้อง สำหรับการลองใช้โฮมบรูว์brew install proctools
cwd

18

บน OS X Lion ด้วยHomebrew :

$ brew install proctools

ดาวน์โหลดนี้สร้างและติดตั้งpgrep, และpkillpfind


มีความเป็นไปได้ไหมที่จะสร้าง GUI เพื่อทำงานในแบบที่ 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 ที่ซื่อสัตย์มากขึ้น (ชื่อกระบวนการเท่านั้นไม่ใช่ args ฉันใช้ / bin / kill ออกเพราะ มันน่าเชื่อถือใช้เวลามากกว่าหนึ่ง PID ที่จะฆ่ามีเทคนิคอื่น ๆ ถ้าคุณอยู่ในการควบคุมของ regexp ที่จะไม่ต้อง 'grep -v grep' - วิธีที่คุณสามารถ pkill greps!)
jrg

ฉันขอแนะนำให้คุณลบfunctionคำหลักมันเลิกใช้แล้ว ดูโพสต์นี้
SiegeX

คุณยอดเยี่ยม
Bijan

2

Proctoolsประกอบด้วยpgrepและpkillและพร้อมใช้งานสำหรับ OpenBSD และ OSX ไม่ได้รับการอัปเดตในขณะนี้ แต่ก็ยังควรใช้งานได้ (อย่างน้อยใน OSX ซึ่งไม่ค่อยปรับเปลี่ยน ABI)


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.