В чем разница между использованием системного монитора и терминала для завершения процесса?

Когда я закрывал свой майнкрафт, он никогда не закрывался полностью, я искал решение, но не нашел его. Через некоторое время я сдался и решил, что убью его вручную, когда захочу закрыть.

Если я использую pgrep и затем убиваю в терминале, это, кажется, не оказывает никакого влияния, но когда я открываю системный монитор и щелкаю правой кнопкой мыши и убиваю его, он красиво выключается.

Каковы различия между способом «Системный монитор» и способом «Терминал»? Системный монитор выполняет в фоновом режиме что-то еще, что не выполняет команда kill?

4
задан 4 January 2016 в 20:39

3 ответа

Нет никакой разницы между командой kill и 'kill' системного монитора. Системный монитор просто приводит некоторые аргументы kill, которые, я полагаю, вы не знаете.

Когда вы kill <process-number>, это на самом деле посылает сигнал этому процессу, чтобы чисто выйти. Это называется SIGTERM. Чтобы завершить процесс безоговорочно, что потенциально может привести к потере данных, вам необходимо отправить другой сигнал:

kill -9 <process-number>

Это отправит сигнал SIGKILL процессу, который немедленно завершит его выполнение. Системный монитор использует kill -9, когда вы просите «убить» процесс, а не просто «закрыть» его.

Этот ответ на SuperUser Stack Exchange должен помочь .

0
ответ дан 4 January 2016 в 20:39

Это потому, что по умолчанию ваш pgrep kill отправляет SIGTERM (завершение). Если приложение не в хорошем состоянии, то SIGTERM не будет работать. «Процесс уничтожения» в системном мониторе отправляет команду SIGKILL, которая буквально уничтожает его. Это два разных посылаемых сигнала. Если вы хотите сделать это с помощью pgrep, вы должны использовать kill -9, опция -9 отправляет сигнал SIGKILL и затем будет точно такой же, что и «Kill Process» системного монитора.

К вашему сведению, название команды kill вводит в заблуждение. man kill говорит:

kill - отправить сигнал процессу

Это может быть любой сигнал. Чтобы увидеть список всех сигналов, наберите man --sections=7 signal и прокрутите вниз.

Затем говорит:

Сигналом по умолчанию для kill является TERM.

См. https://askubuntu.com/a/716814/11929 для получения дополнительной информации.

0
ответ дан 4 January 2016 в 20:39

Когда вы убивали приложение с помощью терминала, я думаю, вы запустили:

kill 1234

На Системном мониторе вы выбрали процесс и решили отправить KILL в процесс. [ 118]

По умолчанию сигнал, отправляемый процессу при использовании обычного kill $pid, равен TERM. Это позволяет приложениям завершать изящно. Тем не менее, при отправке KILL, программа сразу же исчезла без возможности аккуратно завершить работу (т.е. сохранить данные). Чтобы отправить сигнал KILL из командной строки, используйте:

kill -KILL 1234

(альтернативный способ выполнить эту команду - kill -9 1234, это просто вопрос предпочтения)

0
ответ дан 4 January 2016 в 20:39

Другие вопросы по тегам:

Похожие вопросы: