Linux: закрыть программу с командной строкой (не убивать ее)

21

Некоторые приложения допускают только один работающий экземпляр (например, eclipse, если вы хотите использовать одно и то же рабочее пространство). Поэтому, если я вхожу из другого места, мне приходится убивать / закрывать приложение, которое было открыто при предыдущем входе из другого места.

Я всегда использую команду kill, чтобы убить запущенный процесс. Но если вы убьете процесс, он может не сохранить некоторые состояния, которые будут полезны для будущего использования. Однако, если вы «закроете» его правильно, например, нажав кнопку «Закрыть», он сохранит состояния должным образом.

Есть ли способ правильно «закрыть» приложение из командной строки? Я знаю, что это может отличаться от приложений, так что давайте будем немного более общими: как отправить сигнал другому запущенному приложению, и этот сигнал работает так же, как если бы мы нажимали кнопку «Закрыть» на верхней панели?

вендетта
источник
2
Если предположить, что удаленный доступ к рабочему столу с помощью VNC, а затем графическое нажатие кнопки «Закрыть» - это слишком много.
Брайан Свифт

Ответы:

33

По умолчанию команда kill отправляет SIGTERM(сигнал завершения) запущенному процессу. В отличие от этого SIGKILL, который принудительно убивает процесс без возможности ответить, SIGTERMсигнал может быть перехвачен процессом, что позволяет ему завершить его изящно. Является ли это на самом деле это прекращает грациозно полностью зависит от самого процесса; он может так же легко убить себя или полностью игнорировать сигнал.

Вы можете убедиться, что отправляете SIGTERMвместо какого-либо другого сигнала, указав его в командной строке следующим образом:

kill -s TERM <pid>
goldPseudo
источник
1
Да, предпосылка ОП ложна. Команда killпредпринимает попытку постепенного выключения. Если в этом случае приложение не закрывается полностью, оно сломано. (И подавляющее большинство приложений не сломаны.)
Дэвид Шварц
2
Firefox, кажется, (сломан). Если я запускаю kill -s TERM <firefox-pid>, он не будет корректно завершать работу, и когда я запускаю его снова, он спрашивает меня, хочу ли я восстановить сбойный сеанс. : sigh:
Уилсон Ф
6

Обратите внимание, что при использовании pkillвместо kill, чтобы указать TERM, синтаксис:

pkill -TERM <process-name>

pkill Это как убить, но вы можете использовать имя процесса, а не идентификатор. man pkill

Коннор Маккормик
источник