У системах POSIX сигнали завершення зазвичай мають такий порядок (згідно багатьох сторінок MAN та специфікації POSIX):
SIGTERM - ввічливо попросіть процес припинити. Він закінчується граціозно, очищаючи всі ресурси (файли, розетки, дочірні процеси тощо), видаляючи тимчасові файли тощо.
SIGQUIT - більш сильний запит. Він припиняє недоброзичливе, все ще очищення ресурсів, які абсолютно потребують очищення, але, можливо, не видаляє тимчасові файли, можливо, де-небудь записувати інформацію про налагодження; в якійсь системі також буде записано основний дамп (незалежно від того, подано сигнал додатком чи ні).
SIGKILL - найсильніший запит. Процес навіть не просять нічого робити, але система очистить процес, хоч він це чи ні. Швидше за все, написано основний дамп.
Як SIGINT вписується у цю картину? Процес CLI зазвичай закінчується SIGINT, коли користувач потрапляє на CRTL + C, проте фоновий процес також може бути припинений SIGINT за допомогою утиліти KILL. Те, що я не бачу у специфікаціях або файлах заголовка, це якщо SIGINT більш-менш сильний, ніж SIGTERM або якщо взагалі є різниця між SIGINT та SIGTERM.
ОНОВЛЕННЯ:
Найкращий опис сигналів про припинення, які я знайшов поки що, знаходиться в Документації GNU LibC . Це дуже добре пояснює, що між SIGTERM та SIGQUIT існує намічена різниця.
Це говорить про SIGTERM:
Це звичайний спосіб ввічливо попросити програму припинити.
І це говорить про SIGQUIT:
[...] і виробляє дамп ядра, коли він завершує процес, як і сигнал про помилку програми. Ви можете вважати це як стан програмної помилки, «виявлений» користувачем. [...] Окремі види очищення найкраще опускати під час обробки SIGQUIT. Наприклад, якщо програма створює тимчасові файли, вона повинна обробляти інші запити на припинення, видаляючи тимчасові файли. Але для SIGQUIT краще не видаляти їх, щоб користувач міг їх вивчити спільно з основним дамп.
І SIGHUP також пояснюється досить добре. SIGHUP - це насправді не сигнал про припинення, він просто означає, що "з'єднання" з користувачем було втрачено, тому додаток не може очікувати, що користувач прочитає будь-який поданий вихід (наприклад, вихід stdout / stderr), і немає ніякого входу, якого слід очікувати від користувач більше. Для більшості програм це означає, що вони краще вийдуть. Теоретично додаток також може вирішити, що він переходить у демон-режим, коли приймається SIGHUP і тепер працює як фоновий процес, записуючи вихід у налаштований файл журналу. Для більшості демонів, які вже працюють у фоновому режимі, SIGHUP зазвичай означає, що вони повинні переглянути свої конфігураційні файли, тому ви надсилаєте їх фоновим процесам після редагування конфігураційних файлів.
Однак на цій сторінці немає жодного корисного пояснення SIGINT, крім того, що воно надсилається CRTL + C. Чи є якась причина, чому можна було б поводитися з SIGINT інакше, ніж SIGTERM? Якщо так, яка це причина і як би поводження було б різним?
sudo fuser -l
командний рядок. Для мене це підводить:HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED
kill -l
переглянути список сигналів.