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


21

Деякі програми дозволяють використовувати лише один запущений екземпляр (наприклад, eclipse, якщо ви хочете використовувати ту саму робочу область). Тож якщо я входжу з іншого місця, мені доведеться вбити / закрити програму, яка була відкрита, коли я раніше входив з іншого місця.

Я завжди використовую команду kill для вбивання запущеного процесу. Але, якщо ви убиєте процес, це може не врятувати деякі стани, корисні для подальшого використання. Однак, якщо ви "закриєте" його належним чином, натиснувши кнопку закриття, наприклад, це збереже штати належним чином.

Чи є спосіб правильно "закрити" додаток з командного рядка? Я знаю, що це може відрізнятися від додатків, тому давайте будемо трохи більш загальним: як надіслати сигнал іншому запущеному додатку, і цей сигнал працює так само, як якщо ми натискаємо кнопку "закрити" у верхній панелі?


2
Чи слід вважати, що доступ до робочого столу дистанційно за допомогою VNC, а потім графічне клацання закрити - це занадто великі витрати.
Брайан Свіфт

Відповіді:


33

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

Ви можете переконатися, що ви надсилаєте SIGTERMзамість якогось іншого сигналу, зробивши це явним у командному рядку таким чином:

kill -s TERM <pid>

1
Так, передумова ОП помилкова. killКоманда намагається коректно вивантажити. Якщо в цьому випадку додаток не закриється, він зламається. (І переважна більшість заявок не порушена.)
Девід Шварц

2
Firefox здається (зламаним). Якщо я забіжу kill -s TERM <firefox-pid>, він не вимкнеться витончено, і коли я його знову запускаю, він запитує, чи хочу я відновити збій сеансу. : зітхання:
Вілсон F

6

Зауважте, що при використанні, pkillа не killдля визначення терміна, синтаксис:

pkill -TERM <process-name>

pkill так само, як kill, але ви можете використовувати ім'я процесу, а не id. man pkill

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.