Еквівалент ctrl c в команді для скасування програми


75

Я запускаю довгу програму Linux на віддаленій машині, і я хочу її зупинити, але моя проблема полягає в тому, що якщо я застосую команду kill, програма вийде без збереження результатів. Зазвичай для завершення програми я використовую Ctrl+, Cі в такому випадку програма зберігає результати, але зараз я не в машині, яка запускає сеанс, тому я не можу натиснути Ctrl+ C.

Моє запитання: чи є спосіб зробити віддаленим способом еквівалент Ctrl+ C?

Відповіді:


110

Спробуйте:

kill -SIGINT processPIDHere

В основному Ctrl Cнадсилає SIGINTсигнал (переривання), в той час як вбивство надсилає сигнал SIGTERM(припинення) за замовчуванням, якщо ви не вказали сигнал для надсилання.


Як мені дізнатися processPID? Я використовую веб-оболонку для тестування пінгу на своєму маршрутизаторі, і тоді я не можу вбити процес ...
Aero Wang

1
@AeroWang ви можете запустити пошук процесу pingтаким чином:, ps aux | grep "ping"першим числом у стовпці є pid.
adrianTNT

на жаль, інформація про пінг-stdout перевершить людський внесок. @adrianTNT
Aero Wang

Це також працює в OSX. Просто використовуйте сигнальний код замість імені, оскільки в OSX це INT. kill -2 PID
Назар Гринько

8

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

Я думаю, що ви можете використовувати команду kill, щоб надіслати якийсь інший сигнал. (див. Man Man для отримання додаткової інформації)


4

Якщо ви керуєте тривалим віддаленим процесом, ви можете встановити обробник сигналів для SIGTERM (див. man signalІ man sigactionта багато питань SO щодо цієї теми) для гарного очищення перед смертю.

Це дуже поширена справа.


4

Ось приклад для mongod

Щоб запустити демон з командного рядка:

mongod &

Потім пізніше

kill -SIGINT `pgrep mongod`

0

Майте на увазі, як і у вашому обробнику сигналів, що це як обробник переривань, оскільки ви дуже обмежені щодо того, що вам дозволено робити в ньому, не псуючи решту вашої програми. Найкраще, що ви можете зробити тут, - це встановити змінну atomic_t "should_quit".


0

Я роблю, як показано нижче

killall -2 <ProgramName>

або

kill -2 <PID of your process>

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.