Эквивалент ctrl c в команде для отмены программы - PullRequest
65 голосов
/ 05 февраля 2009

Я запускаю длинную программу linux на удаленном компьютере и хочу остановить ее, но моя проблема в том, что если я использую команду kill, то программа завершит работу без сохранения результатов. Обычно то, что я делаю для завершения программы, использует ctrl c, и в этом случае программа сохраняет результаты, но сейчас я не на машине, на которой выполняется сеанс, поэтому я не могу выполнить ctrl c.

У меня вопрос: есть ли способ сделать удаленным способом эквивалент Ctrl-C?.

Ответы [ 6 ]

96 голосов
/ 05 февраля 2009

Попробуйте:

kill -SIGINT processPIDHere

В основном Ctrl C отправляет сигнал SIGINT (прерывание), в то время как kill отправляет сигнал SIGTERM (завершение) по умолчанию, если вы не укажете сигнал для отправки.

7 голосов
/ 05 февраля 2009

ctrl c просто посылает сигнал SIGINT, но есть и другие сигналы, которые немного мягче. http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html

Я думаю, что вы можете использовать команду kill для отправки другого сигнала. (см. man kill для получения дополнительной информации)

4 голосов
/ 05 февраля 2009

Если вы управляете длительным удаленным процессом, вы можете установить обработчик сигнала для SIGTERM (см. man signal и man sigaction и множество вопросов SO по этой теме), чтобы аккуратно очистить перед смертью.

Это очень распространенная вещь.

2 голосов
/ 27 марта 2018

Вот пример для mongod

Для запуска демона из командной строки:

mongod &

Потом позже

kill -SIGINT `pgrep mongod`
0 голосов
/ 08 июня 2019

Я делаю, как показано ниже

killall -2 <ProgramName>

или

kill -2 <PID of your process>

Раньше я забывал название сигнала. т.е. SIGINT / SIGKILL здесь, поэтому я использую номер для этого, как killall -2 или killall -9

0 голосов
/ 05 февраля 2009

Имейте в виду и в своем обработчике сигналов, что он похож на обработчик прерываний в том смысле, что вы очень ограничены в том, что вам разрешено делать в нем, не портя остальную часть вашей программы. Лучшее, что вы можете здесь сделать - это установить переменную atomic_t "should_quit".

...