SIGSTOP
e SIGKILL
sono due segnali che non possono essere catturati e gestiti da un processo. SIGTSTP
è come SIGSTOP
tranne che può essere catturato e gestito.
I segnali SIGSTOP
e SIGTSTP
fermano un processo nelle sue tracce, pronto per SIGCONT
. Quando si invia quel processo a SIGTERM
, il processo non è in esecuzione e quindi non può eseguire il codice per uscire.
(Ci sono anche SIGTTIN
e SIGTTOU
, che sono segnali generati dal livello TTY quando un lavoro in background tenta di leggere o scrivere sul terminale. Possono essere catturati ma altrimenti fermeranno (sospenderanno) il processo, proprio come SIGTSTP
. Ma ora sto andando ignorare quei due per il resto di questa risposta.)
Il tuo CtrlZinvia il processo a SIGTSTP
, che sembra non essere gestito in alcun modo in modo particolare da rsyslogd
, quindi semplicemente sospende il processo in sospeso SIGCONT
o SIGKILL
.
La soluzione qui è anche quella di inviare il SIGCONT
tuo in SIGTERM
modo che il processo possa ricevere e gestire il segnale.
Esempio:
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
La documentazione per la GNU C Library lo spiega abbastanza bene, penso (il mio momento saliente):
Mentre un processo viene interrotto, non è possibile inviare più segnali fino a quando non viene continuato , tranne SIGKILL
segnali e (ovviamente) SIGCONT
segnali. I segnali sono contrassegnati come in sospeso, ma non trasmessi fino al proseguimento del processo. Il SIGKILL
segnale provoca sempre l'interruzione del processo e non può essere bloccato, gestito o ignorato. È possibile ignorare SIGCONT
, ma provoca sempre comunque il proseguimento del processo se viene interrotto. L'invio di un SIGCONT
segnale a un processo comporta l'eliminazione di tutti i segnali di arresto in sospeso per tale processo. Allo stesso modo, tutti i SIGCONT
segnali in sospeso per un processo vengono eliminati quando riceve un segnale di arresto
kill -15
hai già inviato".