Получение полная структура/стек процесса

Текстовые терминалы только понимают символы, не ключи. Таким образом, специальные ключи как Вкладка, Клавиша Backspace, Входят, и так далее должны быть закодированы с точки зрения символов. Набор символов ASCII, на основе которого все современные наборы символов, резервирует пространство для управляющих символов. Одним таким символом является Вкладка. Поскольку это - число символов 9, и I буква номер 9, нажатие Ctrl+I эквивалентно нажатию Tab в текстовом терминале.

Вы видите, какую последовательность символов или последовательность символов ключ отправляет путем выполнения следующего в оболочке:

  1. Начните вводить echo -n ' при подсказке.
  2. Нажмите Ctrl+V, который говорит оболочке, что Вы действительно хотите войти, следующий символ и не иметь его рассматривал как команда редактирования.
  3. Нажмите клавишу (или сочетание клавиш как Shift+Tab), Вы хотите информацию о.
  4. Войти ' | hexdump -C и нажмите Return.

Вы будете видеть распечатку байта (байтов), отправленного ключом шестнадцатеричном. Байты 00 к 1f являются управляющими символами (^@, ^A кому: ^Z, ^[, ^\, ^], ^^ и ^_; ^x общая нотация для управляющего символа, полученного путем нажатия Ctrl+x).

3
27.02.2013, 00:57
4 ответа

На RHEL/CentOS в оболочке удара это обычно - результат вывода усечения PS. В этом случае можно добавить два 'w's к опциям PS получить полную командную строку:

ps -efww | grep java

Существуют больше, чем, вероятно, подобные опции, доступные для Вашего двоичного файла PS, если 'w' опция не выполняет его или не доступна.

2
27.01.2020, 21:24

Если я понимаю правильно, Вы хотите полную командную строку процесса.

В соответствии с Linux или *BSD, передача ww к ps команда, чтобы сказать этому не усекать командные строки.

ps -A ww

Можно извлечь просто аргументы (включая название команды) путем передачи -o args кому: ps.

ps -o args -A ww

В соответствии с Linux, можно передать -C java перечислять только процессы, выполняющие названную команду java.

ps -o args -C java ww

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

ps -o args -C java | cat

В соответствии с Linux, можно получить целую командную строку процесса от /proc/$pid/cmdline где $pid идентификатор процесса. Командная строка хранится однозначно с пустыми байтами для разделения аргументов, таким образом, это хорошо, даже если аргументы содержат пробелы.

1
27.01.2020, 21:24

Используйте /proc файловая система для этого вида вещи. В частности, я думаю, что Вы захотите посмотреть на /proc/$PID/maps. "$PID" является рассматриваемым идентификатором процесса. Можно использовать что-то как cat /proc/$PID/maps получить текстовую версию того, что отображается в где для любого данного PID. cat /proc/self/maps для начинающих: это покажет Вам, в чем отображается простая программа C.

Я нашел пример программы "кошки" в Java и сделал java cat /proc/self/maps. У той простой "кошки" было большое количество ".so" загружаемых библиотек, но только rt.jar отображенный в как .jar файл.

0
27.01.2020, 21:24

Если Вы, оказывается, используете Солярис, можно получить полный список аргументов с одним из:

/usr/ucb/ps -alxww

или

pargs $pid

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

Не уверенный, если бы Вы действительно хотите получить стек процесса также, но на всякий случай, команда для отображения это было бы (предположение, что pid является переменной, содержащей идентификатор процесса JVM):

pstack $pid
0
27.01.2020, 21:24
  • 1
    привет @jlliagre, я также использую Солярис, но я не могу получить полную команду с помощью Примера: bash-3.2$ /usr/ucb/ps -alxwww | grep ftf.sh | head -1 0 39548 737 693 0 23 20 5112 3952 603110c3e70 S ? 248:52 /usr/bin/bash /proj/cmp01/app/ftf/bin/ftf.sh -y -c /proj/cmp01/app/btws/cfg/btw bash-3.2$ Даже pargs, также не работающий в моем случае. bash-3.2$ for i in /usr/ucb/ps-alxww | grep-v "alxww" | grep ftf | grep-v grep | awk '{печатают 2$}' |head-1; do pargs $i; done pargs: cannot examine 39548: no such process or core file –  Tingrammer 01.07.2014, 08:08

Теги

Похожие вопросы