Yanıtlar:
0verilen bir sinyalin gönderilmesi, verilen PIDile herhangi bir işlemin PIDçalışıp çalışmadığını kontrol eder ve ona bir sinyal gönderme izniniz vardır.
Daha fazla bilgi için aşağıdaki sayfalara bakın:
öldürmek (1)$ man 1 kill
...
If sig is 0, then no signal is sent, but error checking is still performed.
...
öldürmek (2)
$ man 2 kill
...
If sig is 0, then no signal is sent, but error checking is still performed; this
can be used to check for the existence of a process ID or process group ID.
...
man 2 killbunun yerine kullanın.
man 1 killve man 2 killbenim Fedora 20 sistemde vardı. Her iki sayfada da gömülü olmak zor.
If sig is 0 (the null signal), error checking is performed but no signal is actually sent. The null signal can be used to check the validity of pid. güvenin
man 2 kill
... bu özel sinyalle ilgili doküman bulmak zor olabilir. Diğerlerinin söylediklerine rağmen man 1 kill, Debian tabanlı sistemlerde bu sinyalin tek sözü :
Özellikle yararlı sinyaller arasında HUP, INT, KILL, STOP, CONT ve 0 bulunur.
Özellikle sinyalin ne yaptığını bilmiyorsanız, özellikle yararlı değil. Ayrıca çıktısıyla listelenmez kill -l, bu yüzden zaten bilmediğiniz sürece bunu bilmezsiniz.
Debian ve Ubuntu sistemlerinde, çıktıları man 2 killkısmen şöyle diyor:
Sig 0 ise, sinyal gönderilmez, ancak yine de hata kontrolü yapılır; bu, işlem kimliğinin veya işlem grubu kimliğinin varlığını denetlemek için kullanılabilir.
kill -0Bir işlemin çalışıp çalışmadığını kontrol etmek için kullanabilirsiniz . Bu örnekleri ele alalım.
# Kill the process if it exists and accepts signals from
# the current user.
sleep 60 &
pid=$!
kill -0 $pid && kill $pid
# Check if a PID exists. When missing, this should result
# in output similar to:
# bash: kill: (6228) - No such process
# Exit status: 1
kill -0 $pid; echo "Exit status: $?"
kill -0Geçerli kullanıcının belirli bir işlemi işaretleme izinlerine sahip olup olmadığını belirlemek için de kullanabilirsiniz . Örneğin:
# See if you have permission to signal the process. If not,
# this should result in output similar to:
# bash: kill: (15764) - Operation not permitted
# Exit status: 1
sudo sleep 60 &
kill -0 $!; echo "Exit status: $?"
kill(2)The kill() function sends the signal specified by sig to pid, a process or a group of processes. Typically, Sig will be one of the signals specified in sigaction(2). A value of 0, however, will cause error checking to be performed (with no signal being sent). This can be used to check the validity of pid.
killMan sayfasına gömülür : "sig 0 ise, sinyal gönderilmez, ancak hata kontrolü hala yapılır."
Bu komut, $ pid içinde PID ile işlemin canlı olup olmadığını kontrol eder.
$pidçalışıyor olabilir, ancak ona bir sinyal gönderme izniniz yok.
kill(1)Her biri için farklı bir hata yazdırılır. Böylece, sinyal gönderme izniniz olup olmadığına bakılmaksızın pid'in canlı olup olmadığını anlayabilirsiniz. Ayrıca, tipik kullanımı, kill -0her zaman doğru kullanılmasa bile pid'in canlı olup olmadığını görmektir. Bu cevabın doğru olduğunu söyleyebilirim (imla dışında).
kill -0 $pidher iki durumda da aynı olmayacaktır. Bu dönecektir 1Eğer çıktıya ayrıştırma olmadan söyleyemem böylece killbunu bir sinyal gönderme izni yoksa süreç, koşma ya değilse. DÜZENLEME: evet biliyorum çoğu zaman bir sürecin canlı olup olmadığını kontrol etmek için kullanılır, ancak sinyali gönderme izniniz olduğunu garanti
killbash yerleşik (soru etiketli bash) stderr ve gösterge üzerindeki hata türünü çıkardığı için bu durumu da kapsadığını söylüyorum dönüş kodundaki bir hata. Yani, çıktıyı doğru yorumladığınızda "Bu komut $ pid'de PID ile işlemin canlı olup olmadığını kontrol eder" tamamen doğrudur. [Cevaba -1 verdiğinizi söylemediyseniz yorum yapmazdım. Yorumunuz başka şekilde geçerlidir].
Kill -0 $ pid, pid ile işlemin mevcut olup olmadığını kontrol etmektir.
İşlemin varlığını kontrol etmek için 'kill -0 $ pid' kullanırken dikkatli olun çünkü
Amaçlanan işlemden çıktıktan sonra pid'i yeni oluşturulan diğer işleme ayrılabilir. (Yani belirli bir sürecin canlı olduğundan ya da olmadığından o kadar emin olamazsınız)
Zombi süreci durumunda, çocuğun ebeveynin beklemesini beklemesi. Burada $ pid tutar ve bu süreç çalışmazken olumlu sonuç verir.
$ Pid ile çalışan bir işlemin canlı olup olmadığını kontrol etmek için kullanılan -0 $ pid'i öldür. Ancak, işlem çıkışı ve yeni işlem çalıştıktan sonra işlem kimliği yeniden atanabildiğinden bu zor olabilir. Belirli bir işlemin çalışıp çalışmadığını öğrenmek için killall -0 kullanılabilir.
EXITSinyali veya 0bir sürece gönderme :stdoutBaşarı üzerine herhangi bir çıktı göndermez .stderrDoğru olmayan bir şeye hata mesajı gönderin .Daha açık bir şekilde, kabuk komut dosyalarınız için kullanışlı bir işlev:
function isProcess ()
{
kill -s EXIT $1 2> /dev/null
}
Bu stdout, başarı üzerine hiçbir metin döndürür , ancak başarısızlık üzerine bir hata iletisi stderr(ancak bu hata iletisini yeniden yönlendirdim /dev/null).
Geçersiz / zombi işlem durumuyla ilgili endişeleriniz varsaps , tercihen --no-headersanahtarla kullanmanız gerekir .
#!/bin/ksh
function trim ()
{
echo -n "$1" | tr -d [:space:]
}
function getProcessStatus ()
{
trim $(ps -p $1 -o stat --no-headers)
}
function isZombie ()
{
typeset processStatus=$(getProcessStatus $1)
[[ "$processStatus" == "Z" ]]
return $?
}