Как я увеличиваю/proc/pid/cmdline 4 096-байтовый предел?

Вы могли просто использовать grep-v на выводе.

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

int main()
{
  int i;
}

Генерирует: нечто cc:4: предупреждение: неиспользуемая переменная 'я'

принимая во внимание, что это не делает:

#define MARKUSED(X)  ((void)(&(X)))

int main()
{
  int i;
  MARKUSED(i);
}
40
задан brian d foy 13 October 2008 в 21:54
поделиться

2 ответа

Я временно обошел ограничение аргумента командной строки в 4096 символов для ps (или, скорее, / proc / PID / cmdline), используя небольшой сценарий для замены команды java.

Во время разработки , Я всегда использую распакованную версию JDK от SUN и никогда не использую установленную JRE или JDK операционной системы, независимо от того, Linux или Windows (например, загрузите bin вместо rpm.bin). Я не рекомендую изменять сценарий для вашей установки Java по умолчанию (например, потому что он может нарушить обновления, перезаписать или создать проблемы или ...)

Итак, предполагая, что команда java находится в /x/jdks/jdk1.6.0_16_x32/ bin / java

сначала удалите фактический двоичный файл:

mv /x/jdks/jdk1.6.0_16_x32/bin/java /x/jdks/jdk1.6.0_16_x32/bin/java.orig

затем создайте сценарий /x/jdks/jdk1.6.0_16_x32/bin/java, например,

    #!/bin/bash

    echo "$@" > /tmp/java.$$.cmdline
   /x/jdks/jdk1.6.0_16_x32/bin/java.orig $@

, а затем сделайте сценарий работающим

chmod a+x /x/jdks/jdk1.6.0_16_x32/bin/java

на случай Чтобы скопировать и вставить вышеупомянутое, вы должны убедиться, что в /x/jdks/jdk1.6.0_16_x32/bin/java нет лишних пробелов и #! / bin / bash - это первая строка

Полная командная строка заканчивается вверху, например, /tmp/java.26835.cmdline, где 26835 - это PID сценария оболочки. Я думаю, что есть также некоторое ограничение оболочки на количество аргументов командной строки, не могу вспомнить, но, возможно, это было 64 КБ символов.

вы можете изменить сценарий, чтобы удалить текст командной строки из /tmp/java.PROCESS_ID.cmdline в конце

После того, как я получил командную строку, я всегда перемещаю сценарий во что-то вроде "java.script" и копирую (cp -a) фактический двоичный файл java.orig обратно в java. Я использую сценарий только тогда, когда достигаю предела 4K.

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

8
ответ дан 27 November 2019 в 01:47
поделиться

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

6
ответ дан 27 November 2019 в 01:47
поделиться
Другие вопросы по тегам:

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