Когда я закрывал свой майнкрафт, он никогда не закрывался полностью, я искал решение, но не нашел его. Через некоторое время я сдался и решил, что убью его вручную, когда захочу закрыть.
Если я использую pgrep и затем убиваю в терминале, это, кажется, не оказывает никакого влияния, но когда я открываю системный монитор и щелкаю правой кнопкой мыши и убиваю его, он красиво выключается.
Каковы различия между способом «Системный монитор» и способом «Терминал»? Системный монитор выполняет в фоновом режиме что-то еще, что не выполняет команда kill?
Нет никакой разницы между командой kill
и 'kill' системного монитора. Системный монитор просто приводит некоторые аргументы kill
, которые, я полагаю, вы не знаете.
Когда вы kill <process-number>
, это на самом деле посылает сигнал этому процессу, чтобы чисто выйти. Это называется SIGTERM. Чтобы завершить процесс безоговорочно, что потенциально может привести к потере данных, вам необходимо отправить другой сигнал:
kill -9 <process-number>
Это отправит сигнал SIGKILL процессу, который немедленно завершит его выполнение. Системный монитор использует kill -9
, когда вы просите «убить» процесс, а не просто «закрыть» его.
Это потому, что по умолчанию ваш pgrep kill отправляет SIGTERM (завершение). Если приложение не в хорошем состоянии, то SIGTERM не будет работать. «Процесс уничтожения» в системном мониторе отправляет команду SIGKILL, которая буквально уничтожает его. Это два разных посылаемых сигнала. Если вы хотите сделать это с помощью pgrep, вы должны использовать kill -9
, опция -9
отправляет сигнал SIGKILL и затем будет точно такой же, что и «Kill Process» системного монитора.
К вашему сведению, название команды kill
вводит в заблуждение. man kill
говорит:
kill - отправить сигнал процессу
blockquote>Это может быть любой сигнал. Чтобы увидеть список всех сигналов, наберите
man --sections=7 signal
и прокрутите вниз.Затем говорит:
Сигналом по умолчанию для kill является TERM.
blockquote>См. https://askubuntu.com/a/716814/11929 для получения дополнительной информации.
Когда вы убивали приложение с помощью терминала, я думаю, вы запустили:
kill 1234
На Системном мониторе вы выбрали процесс и решили отправить KILL в процесс. [ 118]
По умолчанию сигнал, отправляемый процессу при использовании обычного kill $pid
, равен TERM
. Это позволяет приложениям завершать изящно. Тем не менее, при отправке KILL
, программа сразу же исчезла без возможности аккуратно завершить работу (т.е. сохранить данные). Чтобы отправить сигнал KILL из командной строки, используйте:
kill -KILL 1234
(альтернативный способ выполнить эту команду - kill -9 1234
, это просто вопрос предпочтения)