Linux глазами хакера - Михаил Флёнов
Шрифт:
Интервал:
Закладка:
[1] 2805
В квадратных скобках опять число 1, а вот следующее значение отличается от выведенного на первом терминале и будет всегда другим. Это PID (Process ID, идентификатор процесса) созданного процесса, является уникальным для всех пользователей. Это значит, что если вы запустили процесс с номером 2802, то другой пользователь никогда не увидит этого идентификатора. Его PID будет другим.
Запомните идентификаторы, которые вы увидели, впоследствии они пригодятся.
Чтобы узнать, какие процессы у вас запущены, выполните команду jobs. В ответ на это вы получите:
[1] + Stopped man ls
В данном случае мы видим, что процесс с номером [1] загружен в память, и состояние команды man ls — Stopped (остановлен).
Какой смысл в том, что мы отправили просмотр файла помощи в фоновый режим? Я не зря выбрал эту команду, потому что в этом есть резон. Вы в любой момент можете сделать фоновый режим основным. Для этого необходимо ввести команду fg %1, где число 1 указывает номер вашего процесса, который вы видели в квадратных скобках. Попробуйте сейчас выполнить эту директиву, и перед вами откроется запущенная программа man, отображающая файл помощи по использованию команды ls.
Раз процесс можно сделать центральным, значит можно поступить и наоборот. Чтобы вернуть процесс в фоновый режим, нажмите клавиши <Ctrl>+<Z>. Перед вами снова появится командная строка. Выполните команду jobs, чтобы убедиться, что команда man ls все еще работает.
Если в программе есть возможность выполнять системные команды, то вместо сочетания клавиш <Ctrl>+<Z> можно выполнить команду bg %1. Число 1 — это снова номер процесса.
3.4.2. Остановка процессов
Чтобы прекратить работающий процесс, необходимо сделать его центральным и остановить штатными средствами. Чаще всего, на экране есть подсказка, которая поможет выйти из программы. Если она отсутствует, то следует обратиться к документации или просмотреть файл помощи к программе через вызов man имяпрограммы.
Процессы, работающие только в фоне, не могут быть выведены на передний план. Для того чтобы их остановить, есть специализированные команды, которые чаще всего имеют вид:
имясервиса stop
Иногда процессы зависают. Да, такие ситуации бывают и в ОС Linux. Центральный процесс может быть снят с помощью комбинации клавиш <Ctrl>+<C> или <Ctrl>+<Break>. Но этот метод срабатывает не во всех случаях и не для всех программ. Если не удается завершить процесс по- хорошему, то можно поступить иначе. Для этого существует команда kill. Чтобы отключить процесс по личному идентификатору (тот, что мы видели в квадратных скобках), используйте команду:
kill %n
Параметр n нужно заменить на номер процесса. Например, чтобы завершить работу фоновой программы man, нужно выполнить:
kill %1
Затем сразу же запустите команду jobs. Вы должны увидеть на экране сообщение типа:
[1] + Terminated man ls
После повторного вызова команды jobs программы man больше не будет.
Если вы хотите завершить работу процесса, который запущен не вами, но вы знаете его PID, то нужно выполнить команду:
kill n
Знак процента в этом случае не нужен. Тогда команда kill ищет процесс, у которого PID равен указанному числу n и посылает сигнал для завершения.
3.4.3. Просмотр процессов
С помощью команды jobs вы можете увидеть только запущенные вами процессы. Чтобы полюбопытствовать, чем занимаются остальные пользователи в системе, нужно выполнить команду ps. Если запустить ее без параметров, то результат на экране будет примерно следующий:
PID TTY TIME CMD
1652 tty1 00:00:00 bash
1741 tty1 00:00:00 ps
Перед нами четыре колонки, которые показывают идентификатор процесса, терминал, на котором запущена программа, время работы и выполняемая команда.
Это далеко не полный список. Чтобы увидеть все процессы, следует выполнить команду ps с ключом -a. Но и это еще не весь перечень, потому что отобразятся только программы своего терминала. Если требуется полный список процессов, запущенных со всех терминалов, то нужно добавить ключ -х. Помимо этого, вы можете пожелать увидеть имя пользователя, под которым работает процесс, для этого добавьте ключ -u. В итоге, исчерпывающую информацию можно получить, выполнив команду:
ps -axu
Результат работы будет таков:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 1376 452 ? S 14:25 0:05 init
root 2 0.0 0.0 0 0 ? SW 14:25 0:00 [keventd]
root 3 0.0 0.0 0 0 ? SW 14:25 0:00 [kapmd]
root 5 0.0 0.0 0 0 ? SW 14:25 0:00 [kswapd]
root 6 0.0 0.0 0 0 ? SW 14:25 0:00 [bdflush]
root 7 0.0 0.0 0 0 ? SW 14:25 0:00 [kupdated]
root 530 0.0 0.1 1372 436 ? S 14:25 0:00 klogd -x
rpc 550 0.0 0.2 1516 540 ? S 14:25 0:00 portmap
Колонка STAT показывает состояние процесса. Здесь можно встретить следующие коды:
□ S (Sleeping) — спящий, это нормальное состояние для сервисов, которые просыпаются только на редкие запросы клиентов;
□ R (Runnable) — исполняемый в данный момент;
□ T (Traced or Stopped) — в состоянии отладки или остановлен;
□ Z (Zombied) — зависший. Такие можно смело убивать;
□ W — не имеет резидентных страниц;
□ < — обладает высоким приоритетом;
□ N — имеет низкий приоритет.
Это основные состояния, которые вы можете увидеть у процессов в своей системе.
Если в колонке стоит вопросительный знак, то это означает, что процесс запущен еще на этапе загрузки системы и не принадлежит какому-либо терминалу.
Это всего лишь небольшой фрагмент файла. В реально работающей системе процессов очень много, и даже при минимальном количестве запущенных сервисов может не хватить одного экрана для отображения всех. Я люблю сохранять результат работы в текстовый файл, а потом спокойно изучать его в любом редакторе. Для этого я выполняю команду:
ps -axu >> ps.txt
Чтобы увидеть, чем в данный момент занимаются другие пользователи, можно выполнить команду w. В результате вы получите на экране приблизительно такую картину:
10:59am up 37 min, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root tty1 - 10:24am 0.00s 0.82s 0.05s w
flenov tty2 - 10:39am 8:13 0.85s 0.03s grotty
Из данного примера понятно, что в системе находятся два пользователя. На первом терминале работает пользователь root, а на втором — flenov. Очень удобно определять по списку, когда пользователь вошел в систему (колонка [email protected]) и что делает в данный момент (колонка WHAT).
Посмотрите на столбцы JCPU и PCPU, по ним можно оценить загрузку системы. Если ваш компьютер начал работать слишком медленно, то можно увидеть, какой процесс отнимает много процессорного времени.
Команда ps выводит статическую информацию. Для наблюдения за нагрузкой системы удобнее использовать программу top. Она отображает список процессов, отсортированный по убыванию в зависимости от нагрузки (рис. 3.4). Таким образом, вы можете увидеть, какой сервис или программа отнимает драгоценные ресурсы и не дает нормально работать с компьютером.
Рис. 3.4. Результат работы программы top
Если мой компьютер начинает "тормозить", или работа замедляется через определенные промежутки времени, то я запускаю top в отдельном терминале и по мере необходимости переключаюсь на него, чтобы увидеть нагрузку процессов.
Вверху окна выводится количество пользователей, общая загрузка системы и статистика процессов: общее количество, спящие, выполняемые, зависшие и остановленные.
Помимо этого, можно увидеть краткий отчет по использованию памяти: количество занятой и свободной оперативной памяти и размер раздела подкачки. В моем случае в компьютере установлено 256 Мбайт памяти, и из них свободно только 7 Мбайт, а раздел подкачки пока не используется. Такое малое количество свободной памяти говорит о том, что не помешало бы ее нарастить. Чем меньше компьютер использует swap-файл, тем лучше он работает. Конечно, пока что этот файл практически не используется, но если перейти в графический режим и запустить пару мощных приложений, то и Swap-раздела не хватит.
Программа top будет выводить информацию о загрузке процессора с определенным интервалом времени. Для выхода из программы нажмите комбинацию клавиш <Ctrl>+<C>.
3.5. Планирование задач
Очень часто возникает необходимость выполнить какую-либо операцию в определенное время. Раньше я надеялся на свою память и вручную выполнял команды. Но когда несколько раз произошла осечка — просто был слишком занят, чтобы обратить внимание на часы и выполнить нужные действия, — я переложил задачу по слежению за временем на компьютер. И действительно, зачем держать в голове то, что компьютер сделает лучше и точно в указанный срок?