Mac'te bir işlemi bulma ve durdurma


11

Mac'te 8080 numaralı bağlantı noktasında çalışan işlem kimliğini nasıl bulabilir ve durdurabilirim?

Ubuntu'da şu çalışır:

ps -aux

ve süreci bulabilir ve çalıştırabilirim:

kill -9 pid

ps -aux işe yaramadı, bunu Mac OS X Lion'da nasıl yapabilirim?



3
Hayır. Hayır. Hayır. Lütfen, lütfen, kill -9 pidsadece denedikten sonra kullanmayın kill pid. Birçok süreç, kaynak kullanımını temizleyecek, bağlantıları ve diğer kapatma öncesi görevleri temizleyecek sinyal işleyicilere sahip olacaktır. -9 ile öldürürseniz, işlem temizlik yapmadan hemen ölür. -9 olmadan öldürmek çoğu zaman işe yarayacaktır.
Doug Harris

Yanıtlar:


16

Tarihsel nedenlerden dolayı, psseçenekleri karışık ve tutarsız bir karmaşa. OS X Lion'da bunlardan herhangi birinin çalışması gerekir:

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

Test etmek için kullanışlı bir ubuntu kutum yok, ancak man sayfasına göre , ps -auxorada da yapmanın doğru yolu değil:

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

Bir dizeye uyan tüm işlemleri bulmak ve öldürmek istiyorsanız, Mac OSX'te aşağıdakileri de kullanabilirsiniz:

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

Temel olarak bunun ne yapacağını sisteminizde şu anda çalışan tüm işlemleri (grep) bulacağı, AWK, PS komutunda ikinci sütun olan PID'yi alır ve sonuncusu AWK'dan argümanları alır ve süreçler.

SUDO'yu, yalnızca geçerli kullanıcının bir işlemi sonlandırma hakları yoksa ve sisteminizde SUDO erişiminiz varsa kullanın.


3

ps -efMac'in ps -auxlinux ile neredeyse eşdeğer olduğuna inanıyorum .

PID'nin 8080 numaralı bağlantı noktasını kullandığını öğrenmek için: lsof -P | grep 8080

Alanlar şuraya eşlenir:

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

ttcp -rsHangi bağlantı noktasını 5001'de dinlemeye başladım .

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

ve gerçekten de PID 27999 ttcpbaşlattığım sürecin PID'sine karşılık geliyor .


1
Ayrıca ps auxOS X'te (tire olmadan) kullanabilirsiniz . ps -efFarklı sütunlar içerir ve farklı bir biçim kullanır.
Lri

Şu anda karşılaştırmak için bir linux giriş yok; Yıllar önce, IIRC, -aux belirli bir unix lezzetinde beklenen çıktıyı vermediyse, o zaman -ef olurdu ... AIX, Linux, SunOS kullanılır -aux, BSD, Solaris gerekli -ef uyumluluk için; IRIX'in -aux veya -ef olup olmadığını unutuyorum. İlgili sistemlerde büyük farkın ne olduğunu hatırlamıyorum ...
Nevin Williams

OS X'in aux ve Ubuntu'nun aux ve -aux'u aynı biçimi kullanır, ancak Ubuntu'nun -aux'u başlangıçta bir uyarı yazdırır.
Lri

1
Ahha ... Bölünme SysV ve BSD uygulamaları arasındaydı.
Nevin Williams

1

Güncel kalmak için macOS için:

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

Linux için:

ps -ax | grep python | awk '{print "sudo kill -9",  $1}' | sh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.