Как узнать pid процесса linux. Как убить процесс в Linux. Что такое PID

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

Где взять антивирусник и как его установить

Скачивать программы лаборатории Касперского лучше с официального сайта компании. Но для начала давайте подробнее разберёмся с названиями и сокращениями.

Касперский антивирус (Kaspersky Anti-Virus) в сокращённом виде — KAV. Один из первых продуктов компании. Кто по старше наверно помнят, как он раньше кричал поросячьем визгом, когда обнаруживал вирус. Его основная задача защищать ваш компьютер от вирусов.

Касперский интернет секьюрити (Kaspersky Internet Security) в сокращённом виде — KIS. В отличии от KAV он не только защищает ваш компьютер от вирусов, но и делает безопасным пользование интернетом. Он блокирует перехват ваших данных, защищает ввод паролей, блокирует вредные скрипты и сайты, блокирует всплывающие окна и выполняет много других полезных функций. KIS можно устанавливать, как на компьютер, так и на устройства android.

Касперский Тотал Секьюрити (Kaspersky Total Security) в сокращённом виде — KTS. Является относительно новым продуктом компании. Отличается KTS от KIS тем, что у него появилась возможность управлять всеми устройствами, на которых установлен Kaspersky Total Security через портал «my kaspersky», а также несколько полезных и удобных в использовании дополнительных функций.

Защита от вирусов и угроз у этих продуктов одинаковы. Вирусные сигнатуры и технологии лечения используются одни и те же. Даже набор компонентов во вкладке «Защита» ничем не отличается друг от друга. Так, что любой из этих продуктов обеспечит безопасность вашего устройства. Я пользуюсь касперским internet security.

Как установить программу Касперского

Чтобы установить программу её нужно скачать. Как я говорил в самом начале, скачивать лучше с официального сайта. Переходим на сайт kaspersky.ru и выбираем раздел «скачать»

Выбираем продукт для скачивания KAV, KIS или KTS. Нажимаем «скачать». Для примера я выбрал Касперский Internet Security

Запускаем скаченный файл установки и ждём окончания установки.

После установки нам нужно активировать программу. Для этого нажимаем кнопку «Активировать пробную версию программы» и регистрируем антивирусник на 30 дней.

Но, что делать, когда закончиться бесплатный период?

Тут два варианта:

  1. Купить лицензионный ключ KAV, KIS или KTS
  2. Воспользоваться бесплатными триал ключами (как это сделать разберёмся ниже)

Ключи для касперского, где взять и как ими пользоваться

Совсем не давно были очень популярны «журнальные ключи». Эти ключи имели срок службы от 30 до 60 дней. Публиковались они в журналах компьютерной тематики таких, как «Chip», «ComputerBild» и «Мир ПК». С каждым новым выпуском журнала выходили свежие журнальные ключи. Но к сожалению халява закончилась в начале 2017 года.

На смену пришли триал ключи. Что такое trial ключ? Ключ триал — это пробная лицензия сроком от 30 до 90 дней. Она даётся для тестирования антивирусной программы. Функционал программы при этом работает в полном объёме. С помощью этих ключей можно бесплатно и официально пользоваться Касперским.

Для активации таких ключей нужно полностью удалить вместе с информацией о лицензии (при удалении можно поставить галочку) антивирусник. После скачать его с официального сайта, установить и активировать trial ключ.

Другой способ — это сделать ресет триал (reset trial). Для чего это необходимо читайте ниже.

Как сделать Reset trial и зачем он нужен

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

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

Для начала нужно скачать программу Kaspersky Reset Trial . Скачать можно (KRT 2.1.2.69). После того как скачали, НЕ извлекаем архив, а запускаем антивирусник касперского и переходим в настройки.

Выбираем «Дополнительно» → "Самозащита" и отключаем самозащиту.

После отключения выходим из антивирусника. Если не выйти, то при распоковки архива он сразу удалит его..

Запускаем программу Kaspersky Reset Trial и нажимаем сбросить активацию.

При возникновении ошибки: Cannot create file «KRT CLUB 2.0.0.35 Portable\KRT_CLUB.ini».Отказано в доступе нужно для файла KRT_CLUB.ini - убрать галочку «только чтение» в свойствах файла.

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

Остался главный вопрос, где скачать свежие ключи для Касперского? Скачать ключи можно у нас на сайте (смотрите ниже). Поискать в интернете, благо сейчас много сайтов, которые публикуют их.

Скачать свежие ключи для Касперского

Ключи для Kaspersky Anti-virus 2018

(обновлён 11.12.2017)

Ключи для Kaspersky Internet Security 2018

(обновлён 12.05.2018)

Ключи для Kaspersky Total Security 2018

(обновлён 12.05.2018)

Ключи для KIS Android 2018

(обновлен 10.02.2018)

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

Если у вас, что-то не получилось задавайте свои вопросы в комментариях. Всем удачи, пока!

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


Предупреждение : смена PID - нестандартный процесс, и при определенных обстоятельствах может привести к панике ядра.

Наш тестовый модуль будет реализовывать символьное устройство /dev/test, при чтении с которого процессу будет изменен PID. За пример реализации символьного устройства спасибо этой статье. Полный код модуля приведен в конце статьи. Конечно, самым правильным решением было добавить системный вызов в само ядро, однако это потребует перекомпиляцию ядра.

Окружение

Все действия по тестированию модуля выполнялись в виртуальной машине VirtualBox с 64 битным дистрибутивомLInux и версией ядра 4.14.4-1. Связь с машиной осуществлялась с помощью SSH.

Попытка #1 простое решение

Пару слов о current : переменная current указывает на структуру task_struct с описанием процесса в ядре(PID, UID, GID, cmdline, namespaces и т.д)

Первой идеей было просто поменять параметр current->pid из модуля ядра на нужный.

Static ssize_t device_read(struct file *filp, char *buffer, size_t length, loff_t * offset) { printk("PID: %d.\n",current->pid); current->pid = 1; printk("new PID: %d.\n",current->pid); , }
Для проверки работоспособности модуля я написал программу на C++:

#include #include #include int main() { std::cout << "My parent PID " << getppid() << std::endl; std::cout << "My PID " << getpid() << std::endl; std::fstream f("/dev/test",std::ios_base::in); if(!f) { std::cout << "f error"; return -1; } std::string str; f >> str; std::cout << "My new PID " << getpid() << std::endl; execl("/bin/bash","/bin/bash",NULL); }
Загрузим модуль коммандой insmod, создадим /dev/test и попробуем.

# ./a.out My parent PID 293 My PID 782 My new PID 782
PID не изменился. Возможно, это не единственное место, где указывается PID.

Попытка #2 дополнительные поля PID

Если не current->pid является идентификатором процесса, то что является? Быстрый просмотр кода getpid() навел на структуру task_struct , описывающую процесс Linux и файл pid.c в исходном коде ядра. Нужная функция - __task_pid_nr_ns. В коде функции встречается обращение task->pids.pid, этот параметр мы и изменим

Компилируем, пробуем

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

My parent PID 293 My PID 1689 My new PID 1689
Первый результат, уже что-то. Но PID все равно не изменился.

Попытка #3 не экспортируемые символы ядра

Более внимательное изучение pid.c дало функцию, которая делает то, что нам нужно
static void __change_pid(struct task_struct *task, enum pid_type type,
struct pid *new)
Функция принимает задачу, для которой надо изменить PID, тип PID и, собственно, новый PID. Созданием нового PID занимается функция
struct pid *alloc_pid(struct pid_namespace *ns)

Эта функция принимает только пространство имен, в котором будет находиться новый PID, это пространство можно получить с помощью task_active_pid_ns .
Но есть одна проблема: эти символы ядра не экспортируются ядром и не могут использоваться в модулях. В решении этой проблемы мне помогла замечательная . Код функции find_sym взят оттуда.

Static asmlinkage void (*change_pidR)(struct task_struct *task, enum pid_type type, struct pid *pid); static asmlinkage struct pid* (*alloc_pidR)(struct pid_namespace *ns); static int __init test_init(void) { printk(KERN_ALERT "TEST driver loaded!\n"); change_pidR = find_sym("change_pid"); alloc_pidR = find_sym("alloc_pid"); ... } static ssize_t device_read(struct file *filp, char *buffer, size_t length, loff_t * offset) { printk("PID: %d.\n",current->pid); struct pid* newpid; newpid = alloc_pidR(task_active_pid_ns(current)); change_pidR(current,PIDTYPE_PID,newpid); printk("new PID: %d.\n",current->pid); ... }
Комплируем, запускаем

My parent PID 299 My PID 750 My new PID 751
PID изменен! Ядро автоматически выделило нашей программе свободный PID. Но можно ли использовать PID, который занял другой процесс, например PID 1? Добавим после аллокации код

Newpid->numbers.nr = 1;
Комплируем, запускаем

My parent PID 314 My PID 1172 My new PID 1
Получаем настоящий PID 1!

Bash выдал ошибку, из-за которой не будет работать переключение задач по комманде %n, но все остальные функции работают отлично.

Интересные особенности процессов с измененным PID

PID 0: войти нельзя выйти

Вернемся к коду и изменим PID на 0.

Newpid->numbers.nr = 0;
Комплируем, запускаем

My parent PID284 My PID 1517 My new PID 0
Выходит PID 0 не такой и особенный? Радуемся, пишм exit и…

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

Процесс-невидимка

Вернемся к коду и выставим PID, гарантированно не занятый
newpid->numbers.nr = 12345;

Комплируем, запускаем

My parent PID296 My PID 735 My new PID 12345
Посмотрим, что находится в /proc

1 148 19 224 288 37 79 86 93 consoles fb kcore locks partitions swaps version 10 149 2 226 29 4 8 87 acpi cpuinfo filesystems key-users meminfo sched_debug sys vmallocinfo 102 15 20 23 290 5 80 88 asound crypto fs keys misc schedstat sysrq-trigger vmstat 11 16 208 24 291 6 81 89 buddyinfo devices interrupts kmsg modules scsi sysvipc zoneinfo 12 17 21 25 296 7 82 9 bus diskstats iomem kpagecgroup mounts self thread-self 13 176 210 26 3 737 83 90 cgroups dma ioports kpagecount mtrr slabinfo timer_list 139 18 22 27 30 76 84 91 cmdline driver irq kpageflags net softirqs tty 14 182 222 28 31 78 85 92 config.gz execdomains kallsyms loadavg pagetypeinfo stat uptime
Как видим /proc не определяет наш процесс, даже если мы заняли свободный PID. Предыдущего PID тоже нет в /proc, и это весьма странно. Возможно, мы находимся в другом пространстве имен и поэтому не видны основному /proc. Смонтируем новый /proc, и посмотрим что там

1 14 18 210 25 291 738 81 9 bus devices fs key-users locks pagetypeinfo softirqs timer_list 10 148 182 22 26 296 741 82 90 cgroups diskstats interrupts keys meminfo partitions stat tty 102 149 19 222 27 30 76 83 92 cmdline dma iomem kmsg misc sched_debug swaps uptime 11 15 2 224 28 37 78 84 93 config.gz driver ioports kpagecgroup modules schedstat sys version 12 16 20 226 288 4 79 85 acpi consoles execdomains irq kpagecount mounts scsi sysrq-trigger vmallocinfo 13 17 208 23 29 6 8 86 asound cpuinfo fb kallsyms kpageflags mtrr self sysvipc vmstat 139 176 21 24 290 7 80 87 buddyinfo crypto filesystems kcore loadavg net slabinfo thread-self zoneinfo
По прежнему нашего процесса нет, а значит мы в обычном пространстве имен. Проверим

Ps -e | grep bash
296 pts/0 00:00:00 bash

Только один bash, с которого мы и запускали программу. Ни предыдущего PID, ни текущего в списке нет.

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

Функции операционной системы

Прежде чем ответить на вопрос, что такое pid, важно понять функциональные возможности, от реализации которых зависят и функции идентификатора:

  • работа с данными, запуск и остановка ПО;
  • взаимодействие с устройствами ввода/вывода;
  • распределение и организация оперативной памяти;
  • обеспечение доступа к энергозависимым носителям;
  • оптимизация ресурсов машины;
  • обеспечение безопасного доступа каждого объекта к ресурсам машины;
  • надежные вычисления;
  • защита данных от вредоносного ПО и намеренного взлома.


Базовые понятия

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

Процесс - это любой объект, использующий ресурсы системы, согласно стандарту ISO. 9000:2000 - совокупность операций, взаимодействие которых преобразует входящие данные в исходящие.

Любой процесс характеризуется несколькими параметрами:

  • машинным кодом;
  • исполняемым кодом;
  • зарезервированным фрагментом памяти (иногда - виртуальной);
  • атрибутами безопасности;
  • входными/выходными данными;
  • стеком вызова, который следит за активностью каждого объекта;
  • так называемой «кучей», хранящей промежуточные результаты операций и вычислений.

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

Понятие идентификатора

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

Чтобы поближе познакомиться с указателем, можно пойти двумя путями:

  1. Вызываем диспетчер задач правой кнопкой мыши на панели задач. Далее, переходим во вкладку «Процессы», выбираем меню «Вид». Находим пункт «Выбрать столбцы», в открывшемся диалоговом окне ставим галочку для PID. В командной строке прописываем tasklist.
  2. Для Unix-систем верна и другая тактика. Здесь рекомендуется использовать команду ps. С ее помощью можно найти идентификатор для конкретной программы.

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

Современные языки программирования позволяют «вычленить» из обычного номера информацию об интересующем объекте. На программном уровне можно разработать код, напрямую взаимодействующий с pid. Что это дает? Ценой пары кликов удастся вывести полный путь к интересующему файлу или программе. По сути, это позволит не только понять и оптимизировать работу системы (количество необходимых ресурсов), но и защитить машину от потенциальной угрозы.

Чтобы не запутаться

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

Многие пользователи путают два понятия, но они абсолютно разные. После прочтения статьи окончательно должен иссякнуть вопрос, «что такое pid процесса», так как приведенные сведения дают полное описание и возможности указателя. Важно понимать, что функционирование «операционки» напрямую зависит от каждого винтика фундаментальной системы. Сегодня был рассмотрена лишь частичка на микроуровне компьютера как машины.

Как бы там ни было, но некоторые приложения в Linux иногда зависают. При этом бывают ситуации, когда приложение вообще не отзывается, либо работает так медленно, что корректно завершить его работу не представляется возможным. Чтобы оперативно выйти из получившейся ситуации можно «убить» данный процесс. Для этог используеются команды kill и killall . Сейчас мы разберемся как использоваться эти команды, находить PID процесса и посылать сигнал SIGKILL.

Чтобы избежать путацины, договоримся под процессом понимать запущенную в систему программу. Например, если у вас запушено несколько окон браузера Mozilla Firefox — это значит, что запущено три процесса.

Определить PID процесса — команда pidof

PID — уникальный идентификатор процесса в системе Linux . Чтобы корректно выполнить остановку процесса сначала стоит определить его PID. Для этого используются команды ps и grep. В свою очередь команда ps предназначена для вывода списка активных процессов в системе и информации о них. Команда grep запускается одновременно с ps (в канале) и будет выполнять поиск по результатам команды ps. Вывести список всех процессов можно, выполнив в командной строке:

Разумеется, PID можно определить и через top . Но в большинстве случаев количество процессов слишком велико (и динамически меняется в top), поэтому быстро и правильно определить PID не так уж и просто. Как раз для этого используется команда grep. Например, для завершения процесса браузера Google Chrome необходимо выполнить следующую команду:

ps axu | grep chrome

[ ////// ~]$ ps axu | grep chrome
itechf2 20474 2.7 1.5 938416 120136 tty2 Sl+ 11:07 0:00 /opt/google/chrome/chrome

В нашем случае 20474 и есть искомый PID. Более простой способ — использовать команду pidof , при этом необходимо указывать имя процесса. Например:

[ ///// ~]$ pidof chrome
20728 20706 20668 20647 20586 20574 20553 20508 20474

Завершить процесс в Linux — команды kill и killall

Завершить процесс в операционной системе Linux , зная его PID, можно командой kill . Стоит знать и понимать: команда kill предназначена для посылки сигнала процессу. По умолчанию, если мы не указываем какой сигнал посылать, посылается сигнал SIGTERM (от слова termination - завершение). SIGTERM указывает процессу на то, что необходимо завершиться. Каждый сигнал имеет свой номер. SIGTERM имеет номер 15. Список всех сигналов (и их номеров), которые может послать команда kill, можно вывести, выполнив kill -l . Чтобы послать сигнал SIGKILL (он имеет номер 9) процессу 2811, выполните в командой строке:

При этом, сигнал SIGTERM может и не остановить процесс (например, при перехвате или блокировке сигнала), SIGKILL же выполняет уничтожение процесса всегда, так как его нельзя перехватить или проигнорировать.

Команда killall в Linux предназначена для «убийства» всех процессов, имеющих одно и то же имя. Это удобно, так как нам не нужно знать PID процесса. Например, мы хотим закрыть все процессы с именем chrome. Выполните в терминале:

Команда killall, также как и kill, по умолчанию шлет сигнал SIGTERM. Чтобы послать другой сигнал нужно воспользоваться опцией -s . Например:

Бывают такие моменты, когда приложение начинает глючить, и вместе с ним и все рабочее окружение, конечно, можно и перезагрузить компьютер, и исправность сама по себе улетучиться, но это не вариант каждый раз перезагружать свой компьютер. И для этого существует команда Kill , которая поможет вам, остановить зависший процесс.

Команда Kill может быть использована, чтобы убить или прекратить процесс, используя “Signal” или “PID”. Команда Kill посылает указанный сигнал чтобы завершить некорректно ведущее себя приложение. Если не указан ни один сигнал, посылается сигнал TERM. Этот сигнал TERM будет убивать процессы, которые не поймают его; для других процессов может быть необходимо использовать сигнал Kill (номер 9), так как этот сигнал не может быть перехвачен.

SIGTERM – это сигнал который запрашивает остановку работы процесса. Этому процессу дается некоторое время на завершение работы.

Ну а с помощью сигнала SIGKILL мы можем заставить процесс прекратить работу немедленно. И Программа не имеет права проигнорировать этот сигнал, и завершает работу приложения.

Ниже приведен формат команды Kill:

kill [ -signal | -s signal ] pid …

Самый простой способ убить процесс, это найти PID ресурса, а затем запустить PID, как аргумент с командой Kill.

Что такое PID?

Каждому процессу Linux или Unix или выполняемой программе, автоматически присваивается идентификационный номер уникального процесса (PID). PID автоматически присваивает номер для каждого процесса в системе.

Вы можете найти PID ресурса с использованием команды “pidof” или команды “ps”. Чтобы узнать PID процесса (скажем, firefox), используйте следующую команду

Pidof firefox

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

Ps -A | grep -i firefox

В приведенном выше примере, выводится число “23814” которое и является PID процесса firefox. После того, как PID процесса (firefox) вам известно, вы можете использовать команду Kill, чтобы убить процесс (Firefox), как показано ниже.

Kill 23814

Когда команда выполняет уничтожение, то есть она посылает сигнал процессу, чей PID передается вместе с командой в качестве аргумента.

Чтобы быть более конкретным, то команда Kill имеет следующие формы:

  • kill PID
  • kill -15 PID
  • kill -9 PID
  • kill -SIGTERM PID
  • kill -SIGTERM PID

Команда Kill имеет следующие коды возврата:

  • 0 – при успехе
  • 1 – неудача
  • 64 – частичный успех (если указано более одного процесса)

Еще одна команда, которую вы можете использовать, это KillAll . Killall также использует имя процесса вместо PID и завершает все экземпляры процесса с этим именем. Например, если вы запустили несколько экземпляров Firefox, вы можете завершить их все с помощью команды

Killall firefox

Для X-сервера, есть еще одна команда называется Xkill , которая может убивать процессы. Команда Xkill предназначена для графического режима, без прохождения имени процесса или его PID, то есть если вы запустите в терминале

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

Вот так просто и легко, убивать процессы в операционных системах GNU/Linux.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: