SIGSTOP
ve SIGKILL
bir işlem tarafından yakalanıp kullanılamayan iki sinyaldir. SIGTSTP
gibi SIGSTOP
o hariç olabilir yakalanarak ele alınması.
SIGSTOP
Ve SIGTSTP
sinyaller 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 SIGTTIN
ve SIGTTOU
bir 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 SIGTSTP
tarafından herhangi bir şekilde özel olarak ele alınması olmadığı görülüyor, rsyslogd
bu yüzden sadece bekleyen sürecini askıya alır SIGCONT
veya SIGKILL
.
Buradaki çözüm ayrıca işlemin sinyali alabilmesi ve işlemesi için SIGCONT
sizden 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) SIGCONT
sinyaller 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ırSIGKILL
SIGCONT
SIGCONT
SIGCONT
kill -15
çoktan yolladığınız yoldaydı"