Есть ли альтернатива Ctrl+C для остановки сервера rails?

С моей клавиатурой произошел несчастный случай, и теперь некоторые клавиши и комбинации клавиш не работают. Я использую оболочку bash для выполнения команд. Я видел, что использование Ctrl-Pause/Break может остановить сервер на паре сообщений, таких как это, но моя клавиатура настроена так, что Fn + сдвиг вправо для паузы, а Ctrl + Fn + сдвиг вправо для разрыва Как подробно описано на главной странице форума поддержки HP . Это не сработало для меня, так как это могло быть связано с тем, как моя клавиатура отображается, или с клавиатурой, которая сейчас не работает. Есть ли другой способ остановить сервер?

Редактировать: сейчас я использую внешнюю клавиатуру. хотя я пытаюсь использовать встроенную клавиатуру моего ноутбука.


person Nick    schedule 12.01.2015    source источник
comment
Вы можете отправить его SIGINT или SIGTERM через kill. Или вы можете потратить 10 долларов и получить внешнюю клавиатуру.   -  person Chris Heald    schedule 12.01.2015
comment
@ChrisHeald Спасибо за быстрый поиск, который предполагает, что SIGINT - лучшая команда для использования, если есть выбор здесь . Я новичок в Баше. Я ввел команду SIGINT, и мне сказали, что команда не найдена. Есть ли какой-то особый способ, которым мне нужно выполнить эту команду?   -  person Nick    schedule 12.01.2015
comment
Вы можете попробовать переназначить Caps Lock для управления клавиатурой старой школы.   -  person tadman    schedule 12.01.2015
comment
Команда kill посылает вам сигнал (по умолчанию SIGTERM). Вы делаете kill pid, где pid — идентификатор процесса. Если вы знаете имя процесса, вы можете получить pid, используя pgrep name.   -  person Tom Fenech    schedule 12.01.2015
comment
Вы также можете использовать pkill для уничтожения по имени, т.е. pkill -f unicorn.   -  person Chris Heald    schedule 12.01.2015
comment
В качестве альтернативы вы можете получить pid, используя pidof <command name>. Помимо форматирования, команда эквивалентна pgrep. Я советую вам написать простой сценарий оболочки для запуска сервера, когда это произойдет, вы сможете сохранить pid серверного процесса и завершить его позже. Это позволит избежать закрытия других процессов, которые могут быть нежелательным побочным эффектом при использовании kill $(pgrep command), kill command или kill $(pidof command).   -  person ShellFish    schedule 12.01.2015
comment
Я не понял, можно ли еще использовать клавишу CTRL. Если да, попробуйте, если работает CTRL-Z, и после этого оболочка ответит вам сообщением, похожим, например, на [3] Stopped, вы можете выполнить kill %3 (3 — номер задания внутри [x]), в конечном итоге выдав нужный вам сигнал, если он отличается от SIGTERM (Получить полный список с kill -l).   -  person Hastur    schedule 12.01.2015


Ответы (2)


Вы можете найти процесс rails с помощью команды ps следующим образом:

 ➜ ps aux

Вы видите список всего, что работает в вашей системе. Найдите строку, показывающую ваше приложение Rails.

Например, я использую Passenger для запуска своего приложения, имя моего приложения «демо», а моя строка процесса:

me 30704 0.0 2.0 705696 155300 ? Sl 18:58 0:01 Passenger RackApp: demo

Строка процесса показывает вам два элемента, которые могут вам понадобиться:

  • Второй элемент — это идентификатор процесса, также известный как PID.

  • Конечный текст — это имя работающего приложения и его аргументов.

Убейте процесс, отправив сигнал INT в PID:

➜ kill -s INT 30704

Сигналы, которые вам могут понадобиться:

  • INT означает «программное прерывание» и отправляется, когда пользователь вводит символ INTR (обычно C-c).

  • TERM — это общий вежливый способ попросить программу завершить работу.

  • KILL вызывает немедленное завершение программы. Его нельзя обработать, проигнорировать или заблокировать.

Если вам нужно сделать это более одного раза, то есть ярлыки.

Чтобы найти строку процесса, вы можете использовать grep или подобные инструменты, такие как pgrep или pidof.

 ➜ ps aux | grep Passenger

Чтобы найти идентификатор процесса, вы можете использовать awk для вывода второго элемента строки:

 ➜ ps aux | grep Passenger | awk '{print $2}'

Чтобы убить все процессы с определенным шаблоном в имени или аргументах, вы можете использовать pkill:

 ➜ pkill -f Passenger
person joelparkerhenderson    schedule 12.01.2015

Чтобы остановить сервер rails во время его работы, нажмите:

CTRL-Z

person Israel Bustillos    schedule 12.01.2015
comment
Это не остановит его в ожидаемом (убийственном) смысле. - person user2864740; 13.01.2015