Взагалі це має бути добре, щоб зробити це так.
Коли ви натискаєте кнопку "X", щоб закрити вікно терміналу, він надсилає "сигнал" зі свого робочого столу (GNOME, KDE тощо) до програми терміналу, кажучи йому закритись. Оскільки ви використовуєте MATLAB в цій оболонці, він вважається дочірнім процесом до термінальної програми.
Отже, частина обов'язків того, щоб бути батьківським процесом, полягає в тому, що ви в свою чергу надсилаєте цей самий близький "сигнал" своїм дітям.
Тепер, якщо ви розумієте концептуально те, що я щойно пояснив, тоді давайте замінимо трохи більше реальної термінології.
сигнали
По-перше, з "сигналом" насправді існує ціла сім'я різних сигналів, які ви можете відправляти в процеси Unix. Для того, щоб тримати його просто є 4 , що ви часто будете бачити, SIGHUP, SIGTERM, SIGINT, і SIGKILL.
ЗАРАЗ
Сигнал SIGHUP надсилається процесу, коли його керуючий термінал закритий. Спочатку він був розроблений для повідомлення про падіння послідовної лінії. У сучасних системах цей сигнал зазвичай означає, що керування псевдо або віртуальним терміналом було закрито.
SIGTERM
Сигнал SIGTERM - це загальний сигнал, який використовується для викликання завершення програми. На відміну від SIGKILL, цей сигнал можна блокувати, обробляти та ігнорувати. Це звичайний спосіб ввічливо попросити програму припинити.
SIGINT
Сигнал SIGINT ("переривання програми") надсилається, коли користувач вводить символ INTR (зазвичай Cc).
SIGKILL
Сигнал SIGKILL використовується для негайного припинення програми. З нею не можна впоратися чи ігнорувати, і тому завжди є смертельним. Також неможливо заблокувати цей сигнал.
ПРИМІТКА: SIGINT це те, що надсилається, коли ви використовуєте Ctrl+ Cдля "перелому" програми з командного рядка, поки вона знаходиться в середині запуску.
до якого звикаєш?
Швидше за все, SIGTERMце викликає ваше середовище вікна та передається до вашого терміналу. Тоді ваш термінал, швидше за все, потім надсилається SIGHUPв MATLAB. Цей сигнал дає всім процесам можливість зробити будь-яке місцеве очищення (закриття файлів, закінчення процесів тощо) самостійно.
команда kill
Ви можете посилати сигнали самостійно , використовуючи погано з ім'ям команди kill. Отже, щоб надіслати SIGTERMсигнал на ваш термінал або SIGHUP to MATLAB, you could determine their PID usingps`, а потім запустіть цю команду, щоб надіслати їм сигнал:
$ kill -SIGTERM <PID>
або це:
$ kill -SIGHUP <PID>
Ви можете отримати повний список сигналів за допомогою цієї команди:
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...
...
Зауважте, що сигнали мають цифри? Ви часто будете бачити, як вони використовуються так замість їх імен:
$ kill -15 <PID>
Або сумнозвісний -9, який може вбити майже будь-який процес.