"Kill -p" gerçekten işe yarıyor mu?


11

Man sayfasında killaşağıdaki gibi yazılmıştır

ÖZET

  kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
  kill -l [ signal ]

  -p     Specify  that kill should only print the process id (pid) of the
          named processes, and not send any signals.

Ama hem RH hem de RHEL'de birçok kez denediğim gibi, kill -s SIGHUP |-p 123hiç çalışmamış gibi komut verin ve her zaman bir hata bildirildi

bash: -p: komut bulunamadı

Herhangi bir hata yaptım mı?


11
Eğer komuta yazdığınız zaman, kaldırdığınız unutmayın [ ]parantez ve değiştirilmesi signalile SIGHUPve pidile 123? Neden bunu yaptın? Bunu semboller bildiğimiz için [, signalve pidmeta-sözdizimsel yerine edebi daha vardır. Sözdiziminin ne olduğunu belirtirler. Eh, |sözdizimi başka meta-sözdizimsel göstergesi: sembol aynı şeydir. [a | b]şu anlama gelir: isteğe bağlı sözdizimsel öğe, ya ada olabilir b(ancak bir öğe olması gerektiğinden her ikisi birden değil).
Kaz

Talimatınız için teşekkürler. Bu arada, nasıl telaffuz edersin [a | b]?
user43312

Hmm. "İsteğe bağlı A veya B".
Kaz

Yanıtlar:


51
kill [ -s signal | -p ]

Manuel bir sayfadaki sözdizimi şu anlama gelir:

Sen kullanabilir kill -s signal ya kullanabilirsiniz kill -p, ama ikisini kullanamazsınız -sve -paynı anda.

Pipe ( |), (özel) anlamına gelir veya belgelerde bu komutun bir parçası değildir.

Yazdığınızda

foo | bar

senin kabuğunda, bu başlatmaya çalışacaktır foove barçıktısını ve boru fooiçin barprograma. (Yani bunu yaparken kabuk, değil foo(ya bar) |Senin durumunda ya sürecine aktarılmaz.), İkinci bölüm olan -p 123, kabuk denemeden sözde yürütülebilir bulmak -pve bu hata iletisiyle başarısız olur.


Teşekkürler @Mat. Ben de böyle bir komut veriyorum kill -p 123. Diyor bash: kill: p: invalid signal specification. Ve kill -p SIGINT 123aynı şeyi söylüyor. Sintaksa göre sinyali koyabileceğimi sanmıyorum. Sadece -pseçeneğin kullanımının bir gösterisini yapmanın sakıncası var mı?
user43312

2
@ user43312: Bunun için slm'nin cevabına bakın
Mat

32

Bence, Bash killiçin komutla birlikte adlandırılan yerleşik bir komut olduğu gerçeğine takıldınız kill.

$ type -a kill
kill is a shell builtin
kill is /usr/bin/kill
kill is /bin/kill

Okuduğunuz man sayfası, killaltında bulunan komuta başvuruyor /bin. Çağırmak için tam yolu kullanın:

$ /bin/kill -p sleep
16486

Bu arada /usr/bin/killsadece bir bağlantı /bin/kill.

$ ls -l /usr/bin/kill
lrwxrwxrwx 1 root root 14 Feb  9  2011 /usr/bin/kill -> ../../bin/kill

$ readlink -m /usr/bin/kill
/bin/kill

Bu gerçekten işe yarıyor. Ve tüm demoları takdir ediyorum.
user43312

@ user43312 - NP. Örnekleri takip etmek her zaman sayfa 8'den daha kolaydır.
slm
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.