SIGSTOPund SIGKILLsind zwei Signale, die von einem Prozess nicht erfasst und verarbeitet werden können. SIGTSTPist wie die SIGSTOPAusnahme , dass es kann abgefangen und behandelt werden.
Die Signale SIGSTOPund SIGTSTPstoppen einen Prozess in seinen Spuren, bereit für SIGCONT. Wenn Sie diesen Prozess a senden, wird SIGTERMder Prozess nicht ausgeführt, und der Code zum Beenden kann nicht ausgeführt werden.
(Es gibt auch SIGTTINund SIGTTOU- Signale, die von der TTY-Ebene generiert werden, wenn ein Hintergrundjob versucht, Daten auf dem Terminal zu lesen oder zu schreiben. Sie können abgefangen werden, halten den Prozess aber ansonsten an (unterbrechen), genau wie SIGTSTP. Aber ich gehe jetzt um diese beiden für den Rest dieser Antwort zu ignorieren.)
Ihr CtrlZsendet den Prozess a SIGTSTP, der anscheinend in keiner Weise speziell von behandelt wird rsyslogd, so dass er einfach den Prozess pendent SIGCONToder aussetzt SIGKILL.
Die Lösung besteht hier auch darin, SIGCONTnach Ihrem zu senden, SIGTERMdamit der Prozess das Signal empfangen und verarbeiten kann.
Beispiel:
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
Die Dokumentation für die GNU C Library erklärt dies ziemlich gut, denke ich (meine Hervorhebung):
Während ein Prozess gestoppt ist, können keine Signale mehr an ihn gesendet werden, bis er fortgesetzt wird , mit Ausnahme von SIGKILLSignalen und (offensichtlich) SIGCONTSignalen. Die Signale werden als anstehend markiert, aber erst dann zugestellt, wenn der Vorgang fortgesetzt wird. Das SIGKILLSignal führt immer zum Abbruch des Prozesses und kann nicht blockiert, verarbeitet oder ignoriert werden. Sie können ignorieren SIGCONT, aber es führt immer dazu, dass der Prozess trotzdem fortgesetzt wird, wenn er gestoppt wird. Wenn Sie ein SIGCONTSignal an einen Prozess senden, werden alle anstehenden Stoppsignale für diesen Prozess verworfen. Ebenso werden alle anstehenden SIGCONTSignale für einen Prozess verworfen, wenn er ein Stoppsignal empfängt
kill -15bereits gesendeten Daten verarbeitet".