Эквивалент сочетание клавиш CTRL C в команду, чтобы отменить программу


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

мой вопрос: есть ли способ сделать в удаленном режиме эквивалент ctrl c?.

5 57

5 ответов:

попробуй:

kill -SIGINT processPIDHere

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

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

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

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

это очень распространенная вещь, чтобы сделать.

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

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

позже kill -SIGINT `pgrep mongod`

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