Ответ 1
Try:
kill -SIGINT processPIDHere
В основном Ctrl C отправляет сигнал SIGINT
(прерывание), в то время как kill по умолчанию посылает сигнал SIGTERM
(завершение), если вы не укажете отправляемый сигнал.
Я запускаю длинную программу linux на удаленной машине и хочу остановить ее, но моя проблема в том, что если я использую команду kill, то программа завершит работу без сохранения результатов. Обычно для завершения программы я использую ctrl c, и в этом случае программа сохраняет результаты, но сейчас я не на машине, на которой выполняется сеанс, поэтому я не могу выполнить ctrl c.
Мой вопрос: есть ли способ сделать в удаленном режиме эквивалент Ctrl-C?.
Try:
kill -SIGINT processPIDHere
В основном Ctrl C отправляет сигнал SIGINT
(прерывание), в то время как kill по умолчанию посылает сигнал SIGTERM
(завершение), если вы не укажете отправляемый сигнал.
ctrl c просто посылает сигнал SIGINT, но есть некоторые другие сигналы, которые немного более мягкие. http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html
Я думаю, что вы можете использовать команду kill для отправки другого сигнала. (см. man kill для получения дополнительной информации)
Если вы контролируете длительный удаленный процесс, вы можете установить обработчик сигнала для SIGTERM (см. man signal
и man sigaction
и многие вопросы SO по этой теме), чтобы очистить красиво перед тем, как умереть.
Это очень распространенная вещь.
Вот пример для Mongod
Чтобы запустить демон из командной строки:
mongod &
Тогда позже
kill -SIGINT 'pgrep mongod'
Имейте в виду также и в обработчике сигналов, что он похож на обработчик прерываний, поскольку вы очень ограничены в том, что вам разрешено делать в нем, не повреждая остальную часть вашей программы. Самое лучшее, что вы можете здесь сделать, это установить переменную atomic_t "should_quit".
Я делаю как ниже путь
killall -2 <ProgramName>
или же
kill -2 <PID of your process>
Раньше я забывал название сигнала. т.е. SIGINT/SIGKILL здесь, поэтому я использую номер для этого, как killall -2 или killall -9