วิธีค้นหาและหยุดกระบวนการบน Mac


11

ฉันจะค้นหา id กระบวนการและหยุดกระบวนการที่ทำงานบนพอร์ต 8080 บน Mac ได้อย่างไร

บน Ubuntu งานนี้:

ps -aux

และฉันสามารถค้นหากระบวนการและเรียกใช้:

kill -9 pid

ps -aux ดูเหมือนจะไม่ทำงานฉันจะทำสิ่งนี้กับ Mac OS X Lion ได้อย่างไร



3
ไม่ไม่ไม่กรุณาได้โปรดอย่าใช้kill -9 pidจนกว่าคุณจะได้ลองkill pidแล้ว กระบวนการจำนวนมากจะมีตัวจัดการสัญญาณซึ่งจะล้างการใช้ทรัพยากรของพวกเขาปิดการเชื่อมต่อที่สะอาดและงานก่อนปิดเครื่องอื่น ๆ หากคุณฆ่าด้วย -9 กระบวนการจะตายทันทีโดยไม่ต้องล้างข้อมูล การฆ่าที่ไม่มี -9 จะใช้เวลาส่วนใหญ่
Doug Harris

คำตอบ:


16

ด้วยเหตุผลทางประวัติศาสตร์psตัวเลือกของสิ่งต่าง ๆ ยุ่งเหยิงและไม่สอดคล้องกัน บน OS X Lion สิ่งเหล่านี้ควรใช้ได้:

ps -ax
ps -e
ps aux # this displays in a different format

ฉันไม่ได้มีอูบุนตูกล่องมีประโยชน์ในการทดสอบ แต่ตามหน้าคน , ps -auxไม่ได้เป็นวิธีการที่เหมาะสมที่จะทำมันมีอย่างใดอย่างหนึ่ง

Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX
standards require that "ps -aux" print all processes owned by a user
named "x", as well as printing all processes that would be selected by
the -a option. If the user named "x" does not exist, this ps may
interpret the command as "ps aux" instead and print a warning. This
behavior is intended to aid in transitioning old scripts and habits. It
is fragile, subject to change, and thus should not be relied upon.


5

หากคุณต้องการค้นหาและฆ่ากระบวนการทั้งหมดที่สอดคล้องกับสตริงคุณยังสามารถใช้สิ่งต่อไปนี้บน Mac OSX:

ps aux | grep <string> | awk '{print $1}' | <sudo> xargs kill -9

โดยทั่วไปสิ่งที่จะทำคือมันจะค้นหา (grep) กระบวนการทั้งหมดที่กำลังทำงานอยู่ในระบบของคุณที่ตรงกับ AWK ได้รับ PID ซึ่งในคำสั่ง PS คือคอลัมน์ที่สองและสุดท้ายจะใช้อาร์กิวเมนต์จาก AWK และฆ่า กระบวนการ

ใช้ SUDO เฉพาะเมื่อผู้ใช้ปัจจุบันไม่มีสิทธิ์ในการฆ่ากระบวนการและถ้าคุณมีการเข้าถึง SUDO บนระบบของคุณ


3

ฉันเชื่อps -efใน Mac เกือบเทียบเท่าps -auxกับ linux

วิธีรับ PID ที่พอร์ต 8080 ใช้อยู่: lsof -P | grep 8080

เขตข้อมูลแผนที่ออกไป:

[mini-nevie:~] nevinwilliams% lsof -P | head -1
COMMAND     PID          USER   FD     TYPE             DEVICE  SIZE/OFF    NODE NAME

ฉันเริ่มttcp -rsที่จะฟังพอร์ต 5001

mini-nevie:~] nevinwilliams% lsof -P | grep 5001
ttcp      27999 nevinwilliams    3u    IPv4 0xb70c1f66028d6961       0t0     TCP *:5001 (LISTEN)

และแท้จริงแล้ว PID 27999 นั้นสอดคล้องกับ PID ของttcpกระบวนการที่ฉันเปิดตัว


1
นอกจากนี้คุณยังสามารถใช้ps aux(ไม่มีเส้นประ) บน OS X ps -efรวมถึงคอลัมน์ต่าง ๆ และใช้รูปแบบที่แตกต่างกัน
Lri

ฉันไม่ได้มีลินุกซ์เข้าสู่ระบบเพื่อเปรียบเทียบ; ปีที่ผ่านมา IIRC ถ้า -aux ไม่ได้ให้ผลลัพธ์ที่คาดหวังในรสชาติเฉพาะของยูนิกซ์แล้ว -ef จะ ... AIX, Linux, SunOS ใช้ -aux, BSD, Solaris ต้องการ -ef สำหรับความเข้ากันได้; ฉันลืมว่า IRIX เป็น -aux หรือ -ef ฉันจำไม่ได้ว่าความแตกต่างที่สำคัญในระบบที่เกี่ยวข้องคือ ...
Nevin Williams

aux และ Ubuntu ของ OS X ของ aux และ -aux ใช้รูปแบบเดียวกัน แต่ -aux ของ Ubuntu พิมพ์คำเตือนเมื่อเริ่มต้น
Lri

1
อ่า ... การแบ่งอยู่ระหว่างการใช้งาน SysV และ BSD
Nevin Williams

1

หากต้องการทราบข้อมูลล่าสุดสำหรับ macOS:

ps -e | grep python | awk '{print "sudo kill -9",  $1}' | sh

สำหรับ Linux:

ps -ax | grep python | awk '{print "sudo kill -9",  $1}' | sh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.