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

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

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

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

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

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

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

Если я скомпилирую это в файл с именем «myprogram» и запусту его:

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

Вы также можете посмотреть непосредственно /proc/

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

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

/ каталог, в котором хранится такая информация, как:

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

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

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

Источник

Как определить, откуда приложение запущено?

Когда я набираю имя некоторого исполняемого файла в командной строке, и он запускается, как я могу определить путь, где расположен этот исполняемый файл?

2 ответа 2

Вы можете узнать, какой исполняемый файл будет запущен с помощью команды

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

Проблема простого решения

which command находит исполняемый файл данной command в вашем $PATH . К сожалению, это не будет работать, как ожидалось, во всех случаях.

Когда command является псевдонимом или функцией, вы не получите правильный результат, потому что фактический исполняемый файл может иметь совершенно другое имя. Например, во многих дистрибутивах Linux псевдоним ll установлен по умолчанию. which ll не найдет ничего. Другой проблемный случай, когда ваша оболочка ведет себя нестандартным образом и не запускает первую command найденную в $PATH .

Читайте также:  Иконок для папок mac os

Более надежное решение

В Linux, если вы хотите быть полностью уверены в пути к исполняемому файлу запущенного процесса, вы можете получить его из его PID (ID процесса; в приведенном ниже примере вместо $PID ):

Как получить номер? PID последнего запуска процесса в оболочке в фоновом режиме — $! , Небольшая демонстрация:

Вы можете получить PID других процессов, например, из списка процессов, используя ps -ef .

Объяснение: /proc/$PID/exe — это символическая ссылка на исполняемый файл запущенного процесса. Команда readlink показывает цель, на которую указывает символическая ссылка.

Скрипты — это особый случай

К сожалению, метод readlink /proc/$PID/exe не работает должным образом с такими языками сценариев, как bash, Perl, Python и т.д. В таких случаях вы получите путь к интерпретатору сценария (например, /bin/bash ) вместо путь к сценарию. Чтобы приблизиться к информации, вы можете использовать:

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

Все может измениться

Любой процесс может вызвать exec() который заменяет его /proc/$PID/exe , /proc/$PID/cmdline и другую информацию.

Источник

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

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

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

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

7 ответов

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

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

Если я скомпилирую это в файл под названием «myprogram» и запустил его:

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

Вы также можете посмотреть на /proc/

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

Самый надежный способ — посмотреть на /proc dir для процесса. Каждый процесс имеет каталог /proc/

/ , где он хранит информацию, например:

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

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

Читайте также:  Mac os клавиша options

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

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

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

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

Попробуйте использовать команду fuser -vu /var/spool/mail Эта команда отобразит PID процессов, используя указанные файлы или файловые системы. В режиме отображения по умолчанию каждое имя файла сопровождается буквой, обозначающей тип доступа:

c — текущий каталог. e — исполняемый исполняемый файл. f — открыть файл. f не используется в режиме отображения по умолчанию. r — корневой каталог. m — файл или разделяемая библиотека.

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

Wihtout, консультируясь с man-страницей для точных флагов, простой способ финансировать то, что означает командная строка и время начала, ps auxwww должно сработать. Вы можете сделать его более элегантным, если хотите, прочитав страницу руководства.

На команду приходят две команды:

1) получить время начала процесса из ps .

2) lastcomm , который теперь я проверяю, я не установлен. Во всяком случае, описание страницы man говорит:

Но, как говорили несколько человек, «ls -al /proc /» расскажет вам многое!

Источник

Как узнать откуда запускается демон?

Иногда использую teamviewer для помощи родителям например или брату. Но это хрень запускает свой демон. Я так понимаю он мне нафиг не нужен, так как я юзаю его только как клиента. Но в списке sysv-rc-conf его нет. Откуда и как это чудо запускается? И как это узнать?

основной экзешник запускает его, например

Да, при запуске самого приложения — это так. Я наверно не очень хорошо описал — оно запущено после загрузки. Т.е. оно где-то в автозагрузке сидит, но не в init.d

Пакетный менеджер не умеет показать список файлов установленных пакетом для teamviewer? Один из них что-то запускающее демон. Чудо не щупал, просто предположение: может его через dbus дергают? Еще можно ps -auxf и погрипать.

В пользовательской автозагрузке смотрел? А, если у тебя Ubuntu, то еще и в /etc/init загляни.

ps -aux | grep teamviewer

У меня его запускает teamviewerd.service, например. Судя по содержимому пакета, кроме systemd, он умеет sysv и upstart.

Есть мнение, что без онного teamviewer не работает.

Смотреть в teamviewerd в случае systemd

Толку от погрепать? ЧТО он запускает я и так знаю: /opt/teamviewer9/tv_bin/teamviewerd -f

Это понятно. Кто это запускает?

Даже не думал смотреть в пользовательской, потому что оно запущено от root это раз, и два — оно запущено до входа кого-либо в систему.

Собственно мне это-то и не нравится — то что постоянно работает какой-то непонятный проприетарный демон, который мне нужен время от времени.

А, если у тебя Ubuntu, то еще и в /etc/init загляни.

Во — то то что надо.

Читайте также:  Ubuntu one linux proxy

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

Есть мнение, что без онного teamviewer не работает.

Ничо — при старте клиента запустит. А если нет — я вручную запущу, мне не в падлу.

grep -R teamviewerd /etc/rc.d .. или где там еще могут быть скрипты демона пускающие.

А в пакете поискал?

А я с этого начал и не нашел.

Но уже же разобрался: Как узнать откуда запускается демон? (комментарий) — вот он негодник. Что теперь с этим делать?

И как и чем это настраивается? Есть какие-то утилиты? Как этим управлять?

но это же волшебный systemd как я понимаю

Спасибо. Я уже запутался нахрен в этих системах инициализации каждая из которых лучше всех остальных и поддерживает все способы запуска кроме собственного (((

Я уже запутался нахрен в этих системах инициализации

Их три с половиной штуки

и поддерживает все способы запуска кроме собственного

teamviewer при запуске говорит, что он не запущен. Но, я согласен, не фиг его всегда держать включенным.

И как и чем это настраивается? Есть какие-то утилиты? Как этим управлять?

Подозреваю, что запуск демона настраивается из самого TeamViewer

Там есть автозапуск, но речь о клиенте, а не о демоне. Настроек запуска демона не нашел.

Ну и переименуй тогда *.conf. Или грохни.

Да ясно. Но это как-то грубо.

Я тебе, практически, инструкцию от upstart процитировал.

Так раньше и предлагалось делать. Сейчас рекомендуют делать echo manual > /etc/init/daemon.override

Спасибо, всем. Решено. Переименовал короче.

Спасибо, всем. Решено. Переименовал короче.

А ты подумал что будет при обновлении пакета? man 5 init, ищи «override».

Источник

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

Блин к своему стыду не могу найти откуда стартует tacacs, причём всё сделал сам своими руками, но давно и в горячке, поставил настроил включил, заработало и я успокоился. Тут появилась необходимость и не могу нето что вспомнить даже найти откуда запускается. Конфиг есть, файл отчёта есть, в рабочих процессах tac_plus присутствует. Но откуда запускается не могу понять. В /etc нет даже упоминания о tacacs-e нигде, кроме services. Растолкуйте бестолковому 🙁

Рекомендовать в FAQ | Cообщить модератору | Наверх

Оглавление

  • RE: Как узнать откуда запущен процесс., Dima, 15:28 , 26-Апр-02, (1)
    • RE: Как узнать откуда запущен процесс., A.Tsaregorodcev, 16:26 , 26-Апр-02, (3)
  • RE: Как узнать откуда запущен процесс., Emil, 15:38 , 26-Апр-02, (2)

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. «RE: Как узнать откуда запущен процесс.»
Сообщение от Dima on 26-Апр-02, 15:28 (MSK)
Рекомендовать в FAQ | Cообщить модератору | Наверх

3. «RE: Как узнать откуда запущен процесс.»
Сообщение от A.Tsaregorodcev on 26-Апр-02, 16:26 (MSK)

ОК разобрался, сеньк.

Рекомендовать в FAQ | Cообщить модератору | Наверх

2. «RE: Как узнать откуда запущен процесс.»
Сообщение от Emil on 26-Апр-02, 15:38 (MSK)

ps -ef |grep tacacs
or
ps ax |grep tacacs

Источник

Оцените статью