Linux как узнать откуда запускается программа

Предположим, я выполнил команду в Unix, например ls или rm , и переменная пути установлена, как показано ниже.

PATH=$JAVA_HOME/bin. $ORACLE_HOME/bin:/sbin:/usr/sbin:/usr/bin:/usr/ccs/bin:$COBDIR/bin:/sbin:/bin:/usr/local/bin:/bin

Как мы можем узнать, по какому пути запущена команда ls ? ls (просто пример) может быть и в /sbin /usr/bin

Так я хотел бы знать, откуда он побежал?

Я не могу позволить себе искать во всем каталоге и знать, в каком каталоге ls лежит. есть ли прямой способ поиска ls , откуда он запускался?

Gaurav Khurana 3 Янв 2015 в 19:21

3 ответа

Когда вы запускаете внешнюю команду в bash, bash хэширует эту команду, чтобы избежать двойного поиска пути. Команда hash может сообщить вам, какая команда была запущена. Если команда не выполнялась за время существования хэша, она выдаст ошибку.

$ hash -t ls -bash: hash: ls: not found $ ls foo $ hash -t ls /bin/ls

Полезно знать, чем отличаются команды hash , which и type .

  • hash сообщает вам, какой путь/команда была использована/хеширована. Если ваш PATH или файловая система изменились во время жизни hash , hash может сообщить вам о командах, которые произошли до этого изменения.
  • which — это внешняя команда, которая ищет команду в переменной окружения PATH .
  • type — это встроенная команда, которая ищет команду в локальной переменной PATH , которая может (но редко бывает) отличаться от того, что находится в среде.

См. help hash в своем bash, чтобы узнать больше о том, как это работает.

КАК ЗАЙТИ В ЛИНУКС НЕ ЗНАЯ ПАРОЛЯ #linux

kojiro 3 Янв 2015 в 19:36

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

3 Янв 2015 в 20:56

Это сработало, и концепция также стала ясной. Проблема заключалась в том, что в моем текущем каталоге лежал файл с именем ‘ls’. Так что фактическая команда ls не работала. С помощью команды hash я смог узнать, что он был выбран из текущего каталога. вместо /бин.

Gaurav Khurana
3 Янв 2015 в 22:52

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

$ which ls /bin/ls

В нем будет указан путь, по которому он взял этот исполняемый файл. Итак, из приведенной выше команды моя команда ls находится в каталоге /bin.

SMA 3 Янв 2015 в 19:22

В дополнение к другим ответам, в которых упоминается which , type , hash , вы также можете использовать whereis(1) (если она установлена ​​в вашей системе).

whereis сообщает вам стандартные места, где должна быть команда.

Если ваша интерактивная оболочка zsh, вы также можете использовать слово =ls , например. echo =ls или ls =ls , чтобы узнать, на какой ls ссылается оболочка.

И вы также можете использовать псевдоним ls или иметь функцию оболочки ls , маскирующую исполняемый файл /bin/ls и т. д. Конечно, программы могут запускаться /bin/ls без разветвление оболочки (например, с простым fork + execve . )

Linux Mint Урок 01 Откуда, чем скачать и как проверить

Basile Starynkevitch 3 Янв 2015 в 20:26

whereis — особенно плохой выбор, поскольку он дает расширенный набор того, что можно запустить. Поскольку whereis сначала «пытается найти нужную программу в стандартных местах Linux», а /usr/lib является одним из таких мест и не должно быть в PATH, вполне вероятно, что это даст совершенно вводящий в заблуждение результат.

Источник: question-it.com

Linux: Как узнать, где был запущен процесс и как он был запущен?

Я проверял коробку Linux и обнаружил, что Perl-процесс запущен и занимает довольно много времени при использовании процессора. С вершины я мог бы только perl в имени процесса.

Когда я нажал c , чтобы просмотреть командную строку, он показал / var / spool / mail. Что не имеет смысла, так как это каталог.

1) Почему это произошло? Как этот процесс Perl может маскировать свою командную строку? 2) Какой самый надежный способ узнать, где и как был запущен процесс?

В большинстве случаев достаточно просто запустить ps вместе с вашими любимыми флагами, чтобы обеспечить широкий вывод. Я склоняюсь к ps -feww , но другие предложения здесь будут работать. Обратите внимание, что если программа была запущена кем-то другим $PATH , вы увидите только имя исполняемого файла, а не полный путь. Например, попробуйте это:

Читайте также:
На клавиши открываются программы что делать

$ lftp [1] 10201

А затем запустите ps , я увижу другое имя процесса:

$ ps -f -p 10201 UID PID PPID C STIME TTY TIME CMD lars 10201 9734 0 11:37 pts/10 00:00:00 foobar

Вы также можете посмотреть непосредственно /proc//exe , который может быть символической ссылкой на соответствующий исполняемый файл. В приведенном выше примере это дает вам гораздо больше полезной информации, чем ps :

$ls -l /proc/9600/exe lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp

В общем, все файлы в /proc предоставят всю информацию о программе, exe будут ссылкой на исполняемый файл, cwd на текущий рабочий каталог, fd каталог содержит ссылки на открытые файлы (включая стандартный ввод, вывод и стандартную ошибку)

Самый надежный способ — взглянуть на /proc каталог процесса. Каждый процесс имеет /proc// каталог, в котором хранится такая информация, как:

  1. cwd ссылка на текущий рабочий каталог
  2. fd каталог со ссылками на открытые файлы (файловые дескрипторы)
  3. cmdline прочитайте его, чтобы увидеть, какая командная строка была использована для запуска процесса
  4. environ переменные среды для этого процесса
  5. root ссылка на то, что процесс считает своим корневым каталогом (он будет / если не будет изолирован)

Есть более крутая информация о каждом процессе / процессе, но с этими выше вы сможете точно знать, что происходит.

Кроме того, использование ps auxf покажет вам, кто разветвляется, и вы сможете лучше понять, кто вызывает ваш Perl.

Я всегда использую Process Explorer в Windows и спрашиваю себя, существует ли аналог в Linux. Этот переключатель делает все это! ps auxf . приятно!

+1 для параметра f для ps, который сделал это для меня!

+1 за то, что научил меня тому, что кажется таким фундаментальным понятием . /proc содержит информацию о процессе! кто знал?? все, что я когда-либо искал там, было version и cpuinfo все такое . плюс это решает мою реальную проблему, потому что версия моего маршрутизатора ps игнорирует все параметры

для меня, только сейчас, я обнаружил, что pstree дал гораздо более четкое представление о том, как процесс был запущен, чем ps aux

это выглядит так:

├─lightdm─┬─Xorg │ ├─lightdm─┬─init─┬─apache2───2*[apache2───26*[]] │ │ │ ├─at-spi-bus-laun─┬─dbus-daemon │ │ │ │ └─3*[] │ │ │ ├─at-spi2-registr─── │ │ │ ├─dbus-daemon │ │ │ ├─dropbox───29*[ ]

Попробуйте ps axww | grep perl получить полную командную строку вашего процесса. Похоже, top только что обрезал длинную линию.

Источник: qastack.ru

Как узнать откуда запущен процесс linux

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

pstree

У утилиты pstree есть опции, вводить их нужно так:
pstree Вот основные, часто используемые:
pstree -a показать без потоков
pstree -p показать id процесса (порядковый номер запущенной программы/процесса)
pstree -c отключить компактный показ и показать в развернутом виде компактном виде
pstree процесс с таким pid и процессы/потоки, отходящие от него
pstree показать процессы указанного пользователя ps -ax показать все запущенны процессы с: pid, из какого терминала запущен, команда с помощью которой запускался процесс и его файл
ps -aux показать все запущенные процессы, но с еще большим количеством информации (как ах + пользователь, время старта процесса, потребляемая память и затраты ЦП)
ps -ely покажет помимо pid еще и ppid (родительский процесс) — тот процесс, который запустил данных процесс (программа)

В случае где в столбце TTY (терминал) стоит ? значит, что скорее всего процесс был запущен либо на старте ОС, либо он откреплен от терминала (такие процессы называют демонами да, да ) (нужно ли об этом подробнее рассказать?) У утилиты еще много различных опций, но ими я не пользовался

top и htop

В отличие от ps и pstree, эти утилиты в реальном времени показывают какие процессы выполняются. Можно их назвать консольной альтернативой диспетчера задач в Windows. top покажет список процессов запущенных в данные момент с информацией о PID, пользователе, приоритете, потребляемом количестве оперативной памяти и ресурса процессора, название само команды и др.
Вверху будет показана информация об общем количестве запущенных процессов, а также сколько из них находятся в различных состояниях (запущенные, спящие, остановленные, зомби). Также показывается общее, используемое, свободное и буферизованное/кешированное количество памяти.
Для выхода из утилиты нажмите q htop показывает почти то же самое, но гораздо в более удобном формате, кроме того, можно легко отфильтровать по определенному свойству процессы (например, по возрастанию PID или по количеству используемой памяти или иное), некоторые колонки свойств можно убрать или наоборот добавить недостающие. А еще наглядно показываются потоки у процессов, если они есть. Вверху есть полосы, показывающие сколько использовано оперативной памяти и ресурсов процессора, в том числе для каждого ядра процессора. Самое приятное, что хоть это и консольная программа, но она цветная, поэтому можно быстро визуально найти нужную информацию.
Внизу показаны подсказки, на какую клавишу нажать, чтобы залезть в настройки.
переключение между режимом просмотра, режимом сортировки процессов по свойствам и режимом настройки утилиты происходит по нажатию и > (угловых скобок). А если часть названия процесса не умещается на экран, но понажимайте -> и (стрелки).
Для выхода из утилиты нажмите q если htop не установлена, выполните:
sudo apt-get install htop

Читайте также:
Кстати какой канал программа

Список процессов Linux

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

Список процессов в Linux

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

1. Утилита ps

Самый простой способ посмотреть список процессов, запущенных в текущей командой оболочке, использовать команду ps без параметров:

Но вряд-ли вас интересует именно это. Чтобы посмотреть все процессы, добавьте опцию -e, а для максимально подробной информации — опцию -F:

Вот значение основных колонок в выводе утилиты:

  • UID — имя пользователя, от имени которого работает процесс;
  • PID — идентификатор пользователя;
  • PPID — идентификатор родительского процесса пользователя;
  • C — расходование ресурсов процессора, в процентах;
  • SZ — размер процесса;
  • RSS — реальный размер процесса в памяти;
  • PSR — ядро процессора, на котором выполняется процесс;
  • STIME — время, когда процесс был запущен;
  • TTY — если процесс привязан к терминалу, то здесь будет выведен его номер;
  • TIME — общее время выполнения процесса (user + system);
  • CMD — команда, которой был запущен процесс, если программа не может прочитать аргументы процесса, он будет выведен в квадратных скобках;

Чтобы посмотреть список процессов в виде дерева, и понимать какой процесс имеет какие дочерние процессы, выполните команду:

Для просмотра списка процессов с потоками используйте опцию -L:

Здесь появятся ещё две дополнительных колонки:

  • LWP — Это сокращение от LightWeight Proccess. Идентификатор потока;
  • NLWP — количество потоков у этого процесса.

Чтобы посмотреть список процессов определенного пользователя, например, sergiy используйте опцию -u:

Теперь давайте перейдём к другим, более интересным, интерактивным утилитам.

2. Утилита top

Утилита top не поставляется вместе с системой, поэтому вам придется её установить. Для этого в Ubuntu выполните:

sudo apt install top

Программа позволяет интерактивно просматривать список запущенных процессов Linux. Чтобы вывести список процессов Linux выполните команду:

Колонки, которые выводит программа очень похожи на ps:

  • PID — идентификатор процесса;
  • USER — имя пользователя, от имени которого выполняется процесс;
  • PR — приоритет планировщика, установленный для процесса;
  • NI — рекомендуемый приоритет процесса. Это значение можно менять, может не совпадать с реальным приоритетом планировщика;
  • VIRT — всё, что находится в памяти, используется или зарезервировано для использования;
  • RES — всё, что находится в оперативной памяти и относится к процессу. Расшифровывается как Resident Memory Size, указывается в килобайтах;
  • SHR — часть памяти из RES, которую занимают ресурсы, доступные для использования другим процессам. Расшифровывается — Shared Memory Size.
  • S — состояние процесса: D — ожидает завершения операции, R — запущен, S — спит, T — остановлен, t — остановлен отладчиком, Z — зомби;
  • %CPU — процент использования ресурсов процессора;
  • %MEM — процент использования ресурсов оперативной памяти на основе колонки RES;
  • TIME — обще процессорное время, которое процесс использовал с момента запуска;
  • COMAND — команда, с помощью которой был запущен процесс.
Читайте также:
Как закрывать программы на телефон

Для того чтобы сделать вывод программы цветным, нажмите Z:

Чтобы вывести дерево процессов Linux нажмите сочетание клавиш Shift+V:

Для отображения потоков нажмите Shift + H:

Если вам недостаточно стандартных полей с информацией о процессах, вы можете нажать Shift + F и выбрать дополнительные поля, которые надо отображать. Для выбора или удаления поля используйте пробел:

3. Утилита htop

Это ещё более мощная утилита для просмотра запущенных процессов в Linux. Пользоваться ею намного удобнее. Здесь поддерживаются не только горячие клавиши, но и управление мышью. А ещё она выводит всё в цвете, поэтому смотреть на данные намного приятнее. Для установки программы выполните:

sudo apt install htop

Для того чтобы запустить выполните в терминале:

Колонки, которые вы увидите в выводе программы, аналогичны тем, что доступны в top, поэтому я не буду рассматривать их здесь отдельно. Для настройки выводимых данных нажмите кнопку F2, затем перейдите в раздел Display Options:

Здесь надо отметить Tree view для вывода списка процессов в виде дерева, а также снять отметки с пунктов Hide threads. для отображения потоков. Здесь есть как потоки пространства пользователя userland process threads, так и потоки пространства ядра — kernel threads. Теперь всё это будет отображаться:

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

Тут вы можете выбрать какие колонки отображать, а какие нет, а также можете настроить их порядок.

4. Программа Gnome Monitor

Вы можете смотреть запущенные процессы не только в терминале, но и в графическом интерфейсе. Для этого можно использовать утилиту Gnome Monitor. У неё намного меньше возможностей, по сравнению даже с ps, но зато у неё есть графический интерфейс. Вы можете запустить программу из главного меню системы:

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

Теперь программа отображает все запущенные процессы Linux в системе. Здесь вы можете выполнять поиск по процессам, завершать их и многое другое. Но потоков и дерева процессов программа не показывает.

5. Утилита atop

Эта программа тоже позволяет посмотреть процессы в Linux , но немного в другом ключе. Утилиту больше интересует сколько тот или иной процесс потребляет ресурсов системы. Утилита даже может показывать потребление процессами пропускной способности диска и сети, но для этого ей необходим специальный патч ядра. Для установки программы в Ubuntu выполните:

sudo apt install atop

Затем запустите её:

Вот основные колонки, которые выводит утилита и их значения:

  • PID — идентификатор процесса;
  • CID — идентификатор контейнера, используется для контейнеров Docker;
  • SYSCPU — время, потраченное процессом на выполнение в пространстве ядра;
  • USRCPU — время, потраченное процессом на выполнение в пространстве пользователя;
  • VGROW — увеличение использования памяти колонки VIRT за последний период;
  • RGROW — увеличение использования памяти колонки RSS за последний период;
  • ST — статус процесса, N — новый, E — завершенный, S и С — процесс завершен принудительно с помощью сигнала;
  • EXC — код выхода или код сигнала, которым был завершен процесс;
  • THR — общее количество потоков в этом процессе;
  • S — состояние процесса, аналогично описанному для top;
  • CPUNR — номер ядра процессора, на котором запущен основной поток процесса;
  • CPU — процент использования ресурсов процессора;
  • CMD — команда, которой была запущена программа;
  • MEM — процент использования памяти;

Для того чтобы включить отображение потоков процесса нажмите y:

Для просмотра информации о памяти нажмите m, если хотите вернутся обратно, нажмите g:

Выводы

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

Источник: onecomp.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru