Подтвердить что ты не робот

Эквивалент команды ctrl c для отмены программы

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

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

4b9b3361

Ответ 1

Try:

kill -SIGINT processPIDHere

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

Чтобы запустить демон из командной строки:

mongod &

Тогда позже

kill -SIGINT 'pgrep mongod'

Ответ 5

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

Ответ 6

Я делаю как ниже путь

killall -2 <ProgramName>

или же

kill -2 <PID of your process>

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