Bash betiği belirli argümanlarla bir süreç bulmak ve öldürmek için mi?


17

Örnek (ler) sshi -D argümanı (bir yerel proxy kurma ) ile çalıştırılan öldüren bir komut dosyası istiyorum .

Elle, ps -A | grep -i ssh-D ve kill -9 {id}her biri ile örnek (ler) i ararım .

Peki bu bash script biçiminde neye benziyor?

(Mac OS X kullanıyorum ancak gerekli komutları yükleyeceğim port)


Mac OS X'te pgrep ve pkill alternatiflerine bakın ? . pgrepve pkillSolaris ve Linux altında isimleri güvenilir bir şekilde bulma veya öldürme komutlarıdır.
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


26

Çalıştırın pgrep -f "ssh.*-D"ve doğru işlem kimliğini döndürüp döndürmediğine bakın. Eğer varsa, basitçe değiştirmek pgrepiçin pkillve aynı seçenekleri ve desen tutmak

Ayrıca, kill -9kesinlikle gerekli olmadıkça aka SIGKILL kullanmamalısınız, çünkü programlar SIGKILL'i çıkmadan önce kendileri temizlemek için yakalayamaz. Sadece kill -9ilk denemeden sonra kullanıyorum -1 -2ve -3.


öldürmeyi her forbiri kill -iiçin bir döngü olarak yeniden tanımlamanız gerekir i;)
Seamus

1
pgrepOSX'te yerel değilse, üçüncü bir taraftan almanız gerekir. Konuyla ilgili bir önceki başlıkta teklifler ve alternatifler var.
Gilles 'SO- kötü olmayı bırak'

adam hayatta, ne kadar 'nix kullanırsam, o kadar çok seviyorum :) bunun için teşekkürler!
11:19

pgrep ve pkill, OS X 10.8 (Mountain Lion) ve üzeri sürümlerde bulunur. apple.blogoverflow.com/2012/07/…
Peter Hanley

Yalnızca işlem kimliğini değil, aynı zamanda komutu da (bağımsız değişkenler dahil) yazdırmasını sağlayan -abayrağı eklemek yararlı olabilir pgrep. Bu şekilde, yalnızca istenen işlemlerin eşleştiğini doğrulamak çok kolaydır.
luator


0

Bilgileri toplamak için proc dosya sisteminden yararlanabilirsiniz. Örneğin:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

Mükemmel değil, daha özel bir regex isteyeceksiniz (özellikle süreçleri öldürüyorsanız), ancak işlemlerin echo $proc | awk -F'/' '{ print $3 }'PID'sini göstereceksiniz.


1
OSX'de yoktur /proc. Ve zaten bunu yapmak için sağlam bir araç var pgrep( denilen en azından Solaris ve Linux'ta mevcut).
Gilles 'SO- kötü olmayı bırak'
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.