Отправка SIGINT (Ctrl-C) программе, работающей в Eclipse Console

Я настроил конфигурацию запуска в Eclipse и должен отправить программе SIGINT (Ctrl+C). В программе есть код очистки, который запускается после SIGINT, поэтому нажатие кнопок «Завершить» в Eclipse не сработает (я думаю, они отправляют SIGKILL). Ввод CTRL+C в консоли также не работает.

Как отправить SIGINT процессу, работающему внутри консоли Eclipse?

(FWIW, я запускаю демон Twisted, и мне нужно, чтобы Twisted корректно завершил работу, что происходит только при SIGINT)


person vsekhar    schedule 11.01.2012    source источник


Ответы (5)


Если вы можете определить процесс с помощью такой утилиты, как ps, вы можете использовать kill для отправки ему SIGINT. Программа скорее всего будет дочерним процессом eclipse.

kill -s INT <pid>
person jordanm    schedule 11.01.2012
comment
Прямо сейчас я использую kill -INT `pgrep python`, поэтому мне не нужно возиться с поиском pids, но даже это немного громоздко для быстрых циклов кода/отладки. - person vsekhar; 16.01.2012
comment
Вы можете сократить это до pkill -INT python, если не возражаете против уничтожения всех процессов Python. - person jordanm; 16.01.2012
comment
Итак, суть вопроса в том, что kill + pgrep или pkill — это тупые инструменты (и на самом деле есть другие запущенные процессы Python, которые будут уничтожены). Я надеюсь на более детальный подход, и CTRL-C через Eclipse кажется возможным. - person vsekhar; 17.01.2012
comment
Я понимаю, что не решаю вашу проблему напрямую, но вы можете использовать pkill -f вместе с более строгим соответствием, чтобы убедиться, что SIGINT отправляется только тому сценарию, который вам нужен. - person jordanm; 17.01.2012
comment
Ури: Ну, SIGINT — это сигнал UNIX. - person jordanm; 30.04.2012

Вы можете отправить команду через одну строку:

 kill -SIGINT $(ps aux | grep ProgrammName | grep -v grep | awk '{print $2}') 

Получите идентификатор процесса и отправьте сигнал sigint

person John Smithv1    schedule 20.02.2015
comment
Короче: pkill -SIGINT -f ProgrammName - person Artur Czajka; 29.05.2015

Это все еще кажется открытым вопросом: https://bugs.eclipse.org/bugs/show_bug.cgi?id=38016

Просто для полноты: если вы пришли сюда, чтобы найти способ завершить чтение строки из System.in, Ctrl + Z у меня сработало (в Windows).

person Jens Piegsa    schedule 14.07.2016
comment
Вы действительно говорите о консоли eclipse? Я не могу подтвердить это для моей системы Windows: при нажатии Ctrl + Z в представлении консоли ничего не происходит. - person Tobias Liefke; 04.10.2018
comment
Возможно, тогда я по-другому настроил свою среду выполнения: bugs.eclipse.org/bugs /show_bug.cgi?id=38016#c1 - person Jens Piegsa; 04.10.2018
comment
В упомянутом комментарии говорится о Ctrl + C, и даже он был недоступен с 2006 года, см. комментарий 11 - person Tobias Liefke; 05.10.2018
comment
Позвольте мне попытаться реконструировать это: я думаю, что тогда мне нужен был способ завершить строку чтения из System.in. Это действительно другая проблема, которая решается нажатием Ctrl + Z (EOF). Это было упомянуто в комментарии Бизмарка к ответу Джорданма. Извините за путаницу. Я обновил свой ответ соответственно. - person Jens Piegsa; 05.10.2018

в некоторых версиях можно сделать следующее.

В перспективе «Отладка» вы можете открыть представление «Сигналы» («Окно/Показать представление/Сигналы» или значок слева внизу).

Вы получите список всех поддерживаемых сигналов. Щелкните правой кнопкой мыши, и «Возобновить с сигналом» даст вам нужный результат.

person avish    schedule 18.05.2020

Я делаю ответ из модификации Комментарий Артура Чайки.

Вы можете использовать pkill -SIGINT -f ProgramName. Объяснение: pkill похоже на killall, -SIGINT указывает сигнал, который будет использоваться, -f в этом случае улучшает его работу (он будет просматривать аргументы и прочее, а не только имя команды), а ProgramName является целью pkill.

person TheTechRobo36414519    schedule 26.01.2021