Завершить процесс из командной строки. Завершить процесс из командной строки Остановка процесса

Если Ваш компьютер заражен, и Вы принимаете решение удалить вирус самостоятельно, то Вам понадобится остановить вредоносные процессы. Если Вы не являетесь компьютерным гением, мы не рекомендуем удалять вирусы вручную, поскольку в таком случае Вы легко можете навредить своей ПК системе. Вам следует воспользоваться надежными антивирусными программами, такими как или , с помощью которых Вы легко сможете удалить вирусы автоматически. Однако, что же делать в ситуации, когда находящийся в компьютере вирус не позволяет Вам установить антивирусную программу в систему или же блокирует антивирусное ПО, когда Вы пытаетесь запустить его для удаления киберинфекции? Опять же Вам нужно остановить вредоносный процесс. Каким образом Вы можете это сделать? Рассмотрим имеющиеся в Вашем распоряжении варианты:

Остановите вредоносный процесс с помощью диспетчера задач:

  • Чтобы открыть Диспетчер задач, Вы должны одновременно нажать комбинацию клавиш ctrl+shift+esc или ctrl+alt+del .
  • Как только появится Диспетчер задач, выберите закладку Процессы и отыщите вредоносные процессы в списке.
  • Щелкните их правым щелчком мыши и выберите Завершить . Вредоносный процесс легче будет отыскать в списке сразу после запуска Windows.

Если вирус ведет себя агрессивно и оставляет Диспетчер задач неактивным, зайдите в Пуск -> Выполнить и введите ‘taskmgr ‘ без кавычек или проследуйте по адресу C:\Windows\System32 , скопируйте taskmgr и переименуйте его другим именем, например, iexplorer.exe. Теперь запустите диспетчер и выполните указанные выше действия.

Если Вы правильно определили и обезвредили вредоносный процесс, Вы должны заметить исчезновение надоедливых предупреждений и подобных симптомов присутствия вируса. Однако имейте в виду, что описанная выше процедура не УДАЛЯЕТ вирус полностью. Чтобы сделать это, Вам следует продолжить удаление вредоносного ПО путем сканирования системы надежной антишпионской программы.

Остановите вредоносный процесс при помощи безопасного режима:

Для остановки вредоносных процессов, Вы также можете воспользоваться Безопасным режимом с загрузкой сетевых драйверов. Для входа в этот режим, выполните следующие действия:

  • Перезагрузите компьютер и, как только ПК начнет загружаться, многократно нажимайте F8 .
  • Затем выберите Безопасный режим или Безопасный режим с загрузкой сетевых драйверов .
  • Теперь Вы должны заметить, что вирус со всеми его симптомами исчез. Это означает, что Вы успешно завершили вредоносный процесс.

Теперь самое время запустить антишпионскую программу и выполнить полное сканирование системы с тем, чтобы удалить зараженные файлы и папки.

Устраните вредоносный процесс с помощью команды Taskkill:

Если на Вашем зараженном компьютере установлена операционная система Windows, Вы можете попытаться воспользоваться командой Taskkill и её опцией /IM, которая позволяет устранять процессы по их идентификаторам или по именам их образов. Данное средство очень эффективно, если Вы пытаетесь удалить ненужное приложение. Однако Вам следует знать, что это командное средство доступно только в том случае, если Вы точно знаете имена вредоносных процессов.

  • Чтобы открыть taskkill, щелкните Пуск → Выполнить .
  • Теперь введите taskkill/f/im [имя вредоносного процесса].
  • Нажмите Enter .

Когда Вы проделаете указанную процедуру, Вам нужно будет просканировать компьютер надежной антишпионской программой для завершения удаления вируса.

Остановите вредоносные процессы с помощью Process Explorer:

Process Explorer не только позволяет пользователям устранить вредоносные процессы. Он также показывает информацию об активных процессах и об их расположении. Чтобы воспользоваться им для блокирования вредоносных процессов, выполните следующие действия:

  • Скачайте Process Explorer путём ввода в адресную строку броузере ссылки:http://download.sysinternals.com/Files/ProcessExplorer.zip .
  • Запустите Process Explorer (procexp.exe), а затем отыщите вредоносные процессы.
  • Выберите их мышью и нажмите DEL для их удаления.

Теперь просканируйте компьютер с помощью или другой уважаемой антишпионской программы для завершения удаления вируса.

Помимо прямого указания выполнять программу в фоновом режиме, существует еще один способ перевести процесс в фоновый режим. Для этого необходимо выполнить следующие действия:

    запустить процесс выполняться на переднем плане;

    остановить выполнение процесса;

    продолжить процесс в фоновом режиме.

Для выполнения программы введем ее имя в командной строке и запустим на выполнение. Для остановки выполнения программы необходимо нажать на клавиатуре следующую комбинацию клавиш - +. После этого можно увидеть на экране следующее:

/home/student# yes > /dev/null

Stopped yes >/dev/null

Получено приглашение командной строки. Для того чтобы перевести выполнение процесса в фоновый режим, необходимо выполнить следующую команду:

Причем необязательно делать это сразу после остановки процесса, главное правильно указать номер остановленного процесса.

Для того чтобы вернуть процесс из в фонового режима выполнения на передний план, достаточно выполнить следующую команду:

В том случае, если необходимо перевести программу в фоновый или, наоборот, на передний план выполнения сразу после остановки процесса, можно выполнить соответствующую программу без указания номера остановленного процесса.

Существует большая разница между фоновым и остановленным процессом. Остановленный процесс не выполняется и не потребляет ресурсы процесса, однако занимает оперативную память или пространство свопинга. В фоновом же режиме процесс продолжает выполняться.

Для приостановления фонового процесса необходимо переместить процесс на передний план, а затем остановить.

Завершение работы процесса

Существует несколько вариантов завершения работы процесса.

Вариант первый. Если процесс интерактивный, как правило, в документации или прямо на экране написано, как корректно завершить программу.

Вариант второй. В том случае, если не указано как можно завершить текущий процесс (не фоновый), то можно воспользоваться клавиатурной комбинацией +. Возможно использовать также комбинацию клавиш +. А для остановки фонового процесса можно перевести его на передний план, а затем уже воспользоваться вышеприведенными клавиатурными комбинациями.

Вариант третий и самый действенный. В том случае, если не удалось прекратить выполнение процесса вышеприведенными способами – например, программа зависла или "слетел" терминал - для завершения процесса можно воспользоваться следующими командами: kill, killall.

Команда kill может получать в качестве аргумента как номер процесса, так и идентификационный номер (PID) процесса. Таким образом, команда:

/home/student# kill 123 эквивалентна команде:

/home/student# kill %1

Можно видеть, что не надо использовать "%", когда вы обращаетесь к работе по идентификационному номеру (PID) процесса.

С помощью команды killall можно прекратить выполнение нескольких процессов сразу, имеющих одно и то же имя. Например, команда killall mc прекратит работу всех программ mc, запущенных от имени данного пользователя.

Для того чтобы завершить работу процесса, пользователю надо быть его владельцем. Пользователь root может завершить работу любого процесса в операционной системе.

В Linux есть возможность временной остановки выполнения процесса. После остановки процесс остается в оперативной памяти, его данные не теряются. Просто он не будет попадать в очередь на выполнения процессора. В любой момент можно продолжить его выполнение.

Для того, чтобы временно остановить выполнение процесса, ему следует послать сигнал STOP(19).

Например, чтобы остановить работающую программу top, ей посылается сигнал.

$ kill -STOP 18026 $ ps -t pts/1 -o pid,s,comm PID S COMMAND 18015 S bash 18026 T top $

Обратите внимание на поле состояние у процесса , там стоит буква Т. Это значит, что выполнение процесса приостановлено.

В этом месте я должен был написать следующее: «Чтобы продолжить выполнение процесса, пошлите ему сигнал CONT(18)». Так вот, даже если Вы пошлете процессу сигнал CONT, он все равно остается в приостановленном состоянии. Почему так происходит? Дело в том, что данный процесс «привязан» к терминалу, поэтому он не будет реагировать на 18-й сигнал. И возобновлять его работу можно только при помощи средств, встроенных в шелл bash. На сигнал CONT будут реагировать только процессы, не «привязанные» к терминалу, например, процессы-демоны.

# ps -eo pid,s,comm | grep inetd 3743 S inetd # kill -STOP 3743 # ps -eo pid,s,comm | grep inetd 3743 T inetd # kill -CONT 3743 # ps -eo pid,s,comm | grep inetd 3743 S inetd #

Программа inetd - это демон, не «привязанный» к терминалу. Сначала ему был послан сигнал STOP, и он перешел в состояние Т. Затем ему послали сигнал CONT, и он вернулся в рабочее состояние (состояние S означает, что процесс ожидает какой-либо операции ввода-вывода, а значит, он находится в рабочем состоянии. ).

В bash есть интересная встроенная возможность - Job control (управление заданиями). Пользователь может останавливать и продолжать выполнение программ. Оболочка «знает» о всех программах, запущенных при ее помощи, и может выдать полный список всех работающих программ. Для получения списка используют команду jobs.

Jobs [-lnprs]

Но прежде, чем мы рассмотрим использование управления заданиями, разберемся с foreground (интерактивный) и background (фоновый) режимами работы программ.

Когда Вы обычным образом запускаете на выполнение программу, она занимает терминал, точнее, связанные с этим терминалом. Пока эта программа не завершит свою работу, Вы не сможете в нем выполнять новые программы, так как не будет доступна командная строка. Такой режим работы называют foreground.

Bash позволяет запускать программы в фоновом режиме. В этом случае, программа начинает работать параллельно оболочке, на экране появляется приглашение командной строки, и Вы сможете запускать другие программы.

Для того, чтобы запустить программу в фоновом режиме, в командной строке после указания всех параметров программы напишите символ & .

Jobs показывает только временно приостановленные и работающие в фоновом режиме программы. Также следует учитывать, что шелл (а jobs - это встроенная команда шелл) «видит» только те программы, которые были запущены из него. Если какая-то программа была запущена в фоновом режиме в другом терминале или другой программой, jobs текущего шелл не покажет эту программу в своем списке.

Для того, чтобы временно остановить выполнение программы, выполняющейся в foreground-режиме, достаточно нажать комбинацию клавиш Ctrl+Z . Процесс тут же будет приостановлен, и на экране появится приглашение командной строки. Например, во время работы программы была нажата указанная выше комбинация клавиш. На экран будет выведено сообщение о приостановке выполнение программы:

Stopped top $ ps -o pid,s,comm PID S COMMAND 20185 S bash 21231 T top 21238 R ps $

Если теперь запустить jobs, он покажет список приостановленных или выполняющихся в фоновом режиме программ.

$ jobs + Stopped top $

1 - это не PID, а внутренний номер программы. Если необходимо увидеть PID программ, тогда используйте параметр –p:

$ jobs -p 21231 $

Еще больше информации показывает jobs с параметром –l:

$ jobs -l + 21231 Stopped (signal) top $

Символ плюс означает последнюю остановленную программу, минус - предпоследнюю.

Чтобы продолжить выполнение программы в foreground-режиме, можно использовать команду fg. Для продолжения выполнения в фоновом режиме - bg. Обеим программам в качестве параметра можно указывать номер задания - число, которое выводит jobs. Если номер не указан, команда работает с последним процессом.

$ fg top top - 16:34:06 up 6:10, 1 user, load average: 0.00, 0.04, 0.09 Tasks: 74 total, 1 running, 73 sleeping, 0 stopped, 0 zombie Cpu(s): 1.8% us, 0.6% sy, 0.0% ni, 95.2% id, 2.3% wa, 0.0% hi, 0.0% si Mem: 246832k total, 243148k used, 3684k free, 5512k buffers Swap: 514072k total, 70760k used, 443312k free, 111332k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19357 artur 15 0 198m 48m 21m S 1.1 20.2 0:59.18 soffice.bin 4107 root 15 0 161m 21m 2280 S 0.7 8.9 6:42.39 X

Несмотря на то что Linux стабильнее чем Windows, в плане работы программ и различных сервисов, случается всякое и иногда возникает необходимость завершить процесс Linux. Это может понадобиться, если программа завила, когда вы запустили системный сервис в фоне через терминал, а не систему инициализации, а также во многих других случаях, когда убить процесс Linux проще, перезагружать всю систему.

В этой статье мы рассмотрим несколько самых распространенных способов завершить процесс Linux. Опишем подробно как происходит остановка процесса и как все сделать правильно.

Управление процессами в операционной системе Linux осуществляется с помощью сигналов. В том числе и завершение любого процесса. Сигналы передает система, но также их может передавать пользователь с помощью специальных команд или даже сочетаний клавиш в терминале. Когда процессу приходит сигнал о необходимости завершиться, он должен выполнить некоторые подготовительные действия.

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

  • SIGINT - самый безобидный сигнал завершения, означает Interrupt. Он отправляется процессу, запущенному из терминала с помощью сочетания клавиш Ctrl+C. Процесс правильно завершает все свои действия и возвращает управление;
  • SIGQUIT - это еще один сигнал, который отправляется с помощью сочетания клавиш, программе, запущенной в терминале. Он сообщает ей что нужно завершиться и программа может выполнить корректное завершение или проигнорировать сигнал. В отличие от предыдущего, она генерирует дамп памяти. Сочетание клавиш Ctrl+/;
  • SIGHUP - сообщает процессу, что соединение с управляющим терминалом разорвано, отправляется, в основном, системой при разрыве соединения с интернетом;
  • SIGTERM - немедленно завершает процесс, но обрабатывается программой, поэтому позволяет ей завершить дочерние процессы и освободить все ресурсы;
  • SIGKILL - тоже немедленно завершает процесс, но, в отличие от предыдущего варианта, он не передается самому процессу, а обрабатывается ядром. Поэтому ресурсы и дочерние процессы остаются запущенными.

Важно понимать, что нужно дать процессу возможность завершиться корректно. Желательно, чтобы порты и сокеты были освобождены, закрыты и удаленны временные файлы. Поэтому никогда не передавайте сразу SIGKILL. Передавайте сигналы завершения в последовательности, как они перечислены выше.

Сначала Ctrl+C , если это возможно, затем SIGTERM - он хоть и завершает процесс, но делает эту культурно, и только в крайнем случае SIGKILL. А теперь рассмотрим как убить процесс по pid Linux на практике. Если вы всегда используете SIGKILL, тогда на ум приходит такая картинка:

Как убить процесс Linux?

Для передачи сигналов процессам в Linux используется утилита kill. Ее синтаксис очень прост:

$ kill -сигнал pid_процесса

Сигнал представляет собой один из выше перечисленных сигналов для завершения процесса. По умолчанию, если этот параметр не указан, используется сигнал SIGTERM, что является очень правильно. Также нам нужно указать какой процесс нужно завершить. Для этого используется уникальный идентификатор процесса - PID.

Допустим, у нас выполняется утилита ping. Мы хотим ее завершить с помощью kill. Тогда, сначала мы узнаем ее идентификатор с помощью команды ps:

ps aux | grep ping

В первой строчке отобразится сама утилита ping, а во второй сама программа ps. Берем нужный PID и завершаем процесс с помощью SIGTERM:

kill -TERM 20446

И только если после этой команды процесс продолжил висеть, а это вы можете проверить, выполнив ps. Только теперь можно выполнить SIGKILL:

kill -KILL 20446

Теперь снова проверяем:

Если процесс запущен от суперпользователя, то, естественно, вам нужно использовать sudo. Не всегда удобно уничтожать процесс по его PID, как минимум, потому, что вам этот PID нужно еще узнать. Мы могли бы нагородить сложных конструкций с использованием xargs, чтобы вычислять автоматически pid по имени процесса и сразу же его завершать, но в этом нет необходимости. Уже существуют специальные утилиты.

Как завершить процесс с помощью pkill

Утилита pkill - это оболочка для kill, она ведет себя точно так же, и имеет тот же синтаксис, только в качестве идентификатора процесса ей нужно передать его имя. Утилита сканирует директорию proc и находит PID первого процесса с таким именем, затем отправляет ему SIGTERM. Таким образом, вы можете убить процесс по имени Linux. Например, если мы хотим завершить тот же ping:

Также можно вручную задать тип сигнала:

pkill -TERM ping

Вместо ps, вы можете использовать утилиту pgrep для поиска pid процесса, убедимся что наша программа завершена:

Но если вам программа создала несколько процессов, например, браузер chromium или firefox создают отдельный процесс для каждой из вкладок, то эта утилита мало чем поможет. Тут нужен следующий вариант.

Как остановить процесс с помощью killall

killall работает аналогично двум предыдущим утилитам. Она тоже приминает имя процесса в качестве параметра и ищет его PID в директории /proc. Но эта утилита обнаружит все процессы, с таким именем и завершит их. Например:

Как видите, запущено несколько процессов, осталось остановить процесс Linux с помощью killall:

Команда завершит все запущенные утилиты ping, вы можете убедиться в этом еще раз выполнив pgrep:

Выводы

В этой статье мы рассмотрели как убить процесс Linux. Иногда эта задача может быть очень полезной, но важно понимать, что ее нужно выполнять правильно. Нельзя сказать, что передача SIGKILL вместо SIGTERM очень опасна, но так делать не стоит. Надеюсь, эта информация была полезна для вас.