SIGSTOPve SIGKILLbir işlem tarafından yakalanıp kullanılamayan iki sinyaldir. SIGTSTPgibi SIGSTOPo hariç olabilir yakalanarak ele alınması.
SIGSTOPVe SIGTSTPsinyaller hazır, onun parça bir süreci durdurmak SIGCONT. Bu işlemi a gönderdiğinizde, işlem SIGTERMçalışmıyor ve bu nedenle çıkmak için kodu çalıştıramaz.
(Orada da SIGTTINve SIGTTOUbir arka plana iş çalışır terminaline okuma veya yazma ne zaman TTY katmanı tarafından oluşturulan sinyaller hangi. Bunlar takılabilir ama aksi durağı (askıya alacaktır) süreci, tıpkı SIGTSTP. Ama şimdi gidiyorum bu cevabın geri kalanında bu ikisini yok saymak.)
Sizin CtrlZsüreç a gönderir SIGTSTPtarafından herhangi bir şekilde özel olarak ele alınması olmadığı görülüyor, rsyslogdbu yüzden sadece bekleyen sürecini askıya alır SIGCONTveya SIGKILL.
Buradaki çözüm ayrıca işlemin sinyali alabilmesi ve işlemesi için SIGCONTsizden sonra göndermektir SIGTERM.
Örnek:
sleep 999 &
# Assume we got PID 456 for this process
kill -TSTP 456 # Suspend the process (nicely)
kill -TERM 456 # Terminate the process (nicely). Nothing happens
kill -CONT 456 # Continue the process so it can exit cleanly
GNU C Kütüphanesi'nin dokümantasyonu bunu oldukça iyi açıklıyor, bence (vurgularım):
Bir işlem durdurulurken,SIGKILL sinyaller ve (açıkça) SIGCONTsinyaller dışında , devam edene kadar kendisine başka sinyal iletilemez . Sinyaller beklemede olarak işaretlenir, ancak işlem devam edene kadar iletilmez. Sinyal her zaman sürecin sonlandırılmasını neden olur ve bloke ele veya göz ardı edilemez. Görmezden gelebilirsiniz , ancak durdurulursa işlemin yine de devam etmesine neden olur. Bir işleme bir sinyal gönderme , o işlem için bekleyen tüm durma sinyallerinin atılmasına neden olur. Aynı şekilde, bir işlem için beklemedeki sinyaller bir durma sinyali aldığında atılırSIGKILLSIGCONTSIGCONTSIGCONT
kill -15çoktan yolladığınız yoldaydı"