Текстовые терминалы только понимают символы, не ключи. Таким образом, специальные ключи как Вкладка, Клавиша Backspace, Входят, и так далее должны быть закодированы с точки зрения символов. Набор символов ASCII, на основе которого все современные наборы символов, резервирует пространство для управляющих символов. Одним таким символом является Вкладка. Поскольку это - число символов 9, и I
буква номер 9, нажатие Ctrl+I эквивалентно нажатию Tab в текстовом терминале.
Вы видите, какую последовательность символов или последовательность символов ключ отправляет путем выполнения следующего в оболочке:
echo -n '
при подсказке.' | hexdump -C
и нажмите Return.Вы будете видеть распечатку байта (байтов), отправленного ключом шестнадцатеричном. Байты 00 к 1f являются управляющими символами (^@
, ^A
кому: ^Z
, ^[
, ^\
, ^]
, ^^
и ^_
; ^x
общая нотация для управляющего символа, полученного путем нажатия Ctrl+x).
На RHEL/CentOS в оболочке удара это обычно - результат вывода усечения PS. В этом случае можно добавить два 'w's к опциям PS получить полную командную строку:
ps -efww | grep java
Существуют больше, чем, вероятно, подобные опции, доступные для Вашего двоичного файла PS, если 'w' опция не выполняет его или не доступна.
Если я понимаю правильно, Вы хотите полную командную строку процесса.
В соответствии с 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
идентификатор процесса. Командная строка хранится однозначно с пустыми байтами для разделения аргументов, таким образом, это хорошо, даже если аргументы содержат пробелы.
Используйте /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 файл.
Если Вы, оказывается, используете Солярис, можно получить полный список аргументов с одним из:
/usr/ucb/ps -alxww
или
pargs $pid
Остерегайтесь этого, Вы все еще получите усеченный список для процессов, которыми Вы не владеете, если у Вас нет дополнительных полномочий (обычно являющийся корнем).
Не уверенный, если бы Вы действительно хотите получить стек процесса также, но на всякий случай, команда для отображения это было бы (предположение, что pid является переменной, содержащей идентификатор процесса JVM):
pstack $pid
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