Cara menemukan dan menghentikan proses pada Mac

11

Bagaimana saya bisa menemukan id proses dan menghentikan proses yang berjalan pada port 8080 pada Mac?

Di Ubuntu ini berfungsi:

ps -aux

dan saya dapat menemukan proses dan menjalankan:

kill -9 pid

ps -aux sepertinya tidak berfungsi, bagaimana saya bisa melakukan ini di Mac OS X Lion?

menyelesaikan codec
sumber
3
Tidak. Tidak. Tidak. Tolong, tolong, jangan gunakan kill -9 pidsampai setelah Anda mencoba saja kill pid. Banyak proses akan memiliki penangan sinyal yang akan membersihkan penggunaan sumber daya mereka, dengan bersih menutup koneksi dan tugas pra-shutdown lainnya. Jika Anda membunuh dengan -9, proses mati segera tanpa melakukan pembersihan. Membunuh tanpa -9 akan berhasil sebagian besar waktu.
Doug Harris

Jawaban:

16

Untuk alasan historis, pspilihannya adalah kekacauan yang kusut dan tidak konsisten. Di OS X Lion, semua ini akan berfungsi:

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

Saya tidak memiliki kotak ubuntu yang mudah untuk diuji, tetapi menurut halaman manual , ps -auxjuga bukan cara yang tepat untuk melakukannya di sana:

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.
Gordon Davisson
sumber
5

Gunakan Activity Monitor.

Applications-> Utilities->Activity Monitor

gadgetmo
sumber
5

Jika Anda ingin menemukan dan membunuh semua proses yang sesuai dengan string, Anda juga dapat menggunakan yang berikut ini di Mac OSX:

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

Pada dasarnya apa yang akan dilakukan adalah bahwa ia akan menemukan (grep) semua proses yang berjalan pada sistem Anda yang cocok dengan, AWK mendapat PID, yang dalam perintah PS adalah kolom kedua dan yang terakhir mengambil argumen dari AWK dan membunuh proses.

Gunakan SUDO, hanya jika pengguna saat ini tidak memiliki hak untuk mematikan proses dan jika Anda memiliki akses SUDO di sistem Anda.

gagneet
sumber
3

Saya percaya ps -efpada Mac hampir setara dengan ps -auxdi linux.

Untuk mendapatkan PID yang memiliki port 8080 digunakan: lsof -P | grep 8080

Field memetakan ke:

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

Saya memulai ttcp -rsyang mendengarkan pada port 5001.

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

dan memang, PID 27999 sesuai dengan PID dari ttcpproses yang saya luncurkan.

Nevin Williams
sumber
1
Anda juga dapat menggunakan ps aux(tanpa tanda hubung) pada OS X. ps -eftermasuk kolom yang berbeda dan menggunakan format yang berbeda.
Lri
Saya kebetulan tidak memiliki login linux untuk membandingkan; Bertahun-tahun yang lalu, IIRC, jika -aux tidak memberikan output yang diharapkan pada rasa unix tertentu, maka -ef akan ... AIX, Linux, SunOS digunakan -aux, BSD, Solaris diperlukan -ef untuk kompatibilitas; Saya lupa apakah IRIX -aux atau -ef. Saya tidak ingat apa perbedaan utama dalam sistem masing-masing ...
Nevin Williams
Aux OS X dan aux Ubuntu dan -aux menggunakan format yang sama, tetapi Ubuntu -aux mencetak peringatan di awal.
Lri
1
Ahha ... Perpecahan itu antara implementasi SysV dan BSD.
Nevin Williams
1

Untuk tetap mendapatkan informasi terbaru, untuk macOS:

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

Untuk Linux:

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