в Linux вам, вероятно, понадобится -ww (то есть ps -ww -fp <pid>), чтобы указать широкий вывод, так как, если есть несколько команд, они могут быть обрезаны.
cat /proc/<pid>/cmdlineтакже работает на Cygwin, где аргументы строки cmd не отображаются psни с одним параметром.
Лечуп
3
В Linux, если вам нужно только получить команду args, ps -o args -p <pid>она будет и будет печатать argsили использовать -o cmd, только если вам нужно увидеть cmd. Попытка чтения /proc/<pid>/cmdlineне всегда работает для непривилегированных пользователей. psУтилита будет работать.
alvits
2
Подсказка: длина /proc/<pid>/cmdlineограничена (жестко запрограммирована на значение параметра ядра PAGE_SIZE), поэтому более длинные командные строки по-прежнему отображаются усеченными! См. Stackoverflow.com/questions/199130/… для получения дополнительной информации. Вы можете запросить настройки вашего ядра с помощью getconf PAGE_SIZE, обычно это
4096.
61
Это сделает свое дело:
xargs -0 < /proc/<pid>/cmdline
Без xargs между аргументами не будет пробелов, потому что они были преобразованы в NUL.
xargs -0 echo </ proc / <pid> / cmdline. Вы также можете сделать это с / proc / <pid> / environment, хотя вы можете добавить -n 1 для этого.
Camh
В моей системе нет файловой системы / proc :( любое другое решение?
Hemant
Мой процесс Java с длинными и длинными параметрами. Это все еще обрезает мой вывод. Любой совет?
Johnsam
14
Вы можете использовать pgrepс -f(полная командная строка) и -l(длинное описание):
pgrep -l -f PatternOfProcess
Этот метод имеет решающее значение с любым из других ответов: он работает на CygWin , так что вы можете использовать его , чтобы получить полную командную строку любого процесса , работающего под ОС Windows (выполняются как повышенные , если вы хотите данные о любом приподнятой процессе / администратора) , Любой другой способ сделать это в Windows более неудобен ( например ).
Более того: в моих тестах путь pgrep был единственной системой, которая работала для получения полного пути для скриптов, работающих внутри Python CygWin .
На самом деле это также печатает оригинальное имя исполняемого файла:$ exec -a fakename bash & [1] 14102 [1]+ Stopped exec -a fakename bash $ xargs -0 < /proc/14102/cmdline; fakename $ pgrep -l -f fakename; 14102 bash
unhammer
Не работает для меня, используя pgrep from procps-ng 3.3.15и 3.3.12. Просто печатает pid и prorgam name без аргументов.
Socowi
4
Другой вариант печати /proc/PID/cmdlineс пробелами в Linux:
cat -v /proc/PID/cmdline | sed 's/\^@/\ /g' && echo
Таким образом catпечатается символ NULL, а ^@затем вы заменяете их пробелом sed; echoпечатает новую строку.
К вашему сведению, вы также можете использовать cat -v / proc / PID / cmdline | sed 's / \ ^ @ / \ n / g' . Это заменит нулевой символ символом новой строки. При этом каждый аргумент будет напечатан в отдельной строке. Таким образом, легче отличить один аргумент от другого.
В дополнение ко всем вышеперечисленным способам преобразования текста, если вы просто используете «строки», он по умолчанию выводит на отдельные строки. С дополнительным преимуществом это может также предотвратить появление любых символов, которые могут зашифровать ваш терминал.
Оба вывода в одну команду:
strings / proc // cmdline / proc // environment
Реальный вопрос заключается в том ... есть ли способ увидеть реальную командную строку процесса в Linux, которая была изменена так, чтобы командная строка содержала измененный текст вместо фактической команды, которая была выполнена.
Если вы хотите получить максимально возможную длину (не знаете, какие существуют ограничения), подобную паргам Solaris , вы можете использовать это в Linux и OSX:
tr \\0 ' ' < /proc/<pid>/cmdline
Ответы:
Есть несколько вариантов:
Больше информации в
/proc/<pid>
Linux , просто посмотрите.В других Unixes все может быть иначе. Команда
ps
будет работать везде,/proc
все зависит от ОС. Например, в AIX нетcmdline
в/proc
.источник
ps -ww -fp <pid>
), чтобы указать широкий вывод, так как, если есть несколько команд, они могут быть обрезаны.-ww
опция позволяет получить доступ к полным аргументов командной строки (столько же , сколько хранится в ядре). См. Также: как solaris и bsd получают необработанные параметры командной строки для процесса и параметры pscat /proc/<pid>/cmdline
также работает на Cygwin, где аргументы строки cmd не отображаютсяps
ни с одним параметром.args
,ps -o args -p <pid>
она будет и будет печататьargs
или использовать -ocmd
, только если вам нужно увидетьcmd
. Попытка чтения/proc/<pid>/cmdline
не всегда работает для непривилегированных пользователей.ps
Утилита будет работать./proc/<pid>/cmdline
ограничена (жестко запрограммирована на значение параметра ядра PAGE_SIZE), поэтому более длинные командные строки по-прежнему отображаются усеченными! См. Stackoverflow.com/questions/199130/… для получения дополнительной информации. Вы можете запросить настройки вашего ядра с помощьюgetconf PAGE_SIZE
, обычно этоЭто сделает свое дело:
Без xargs между аргументами не будет пробелов, потому что они были преобразованы в NUL.
источник
xargs -0 < /proc/<pid>/cmdline
.Полная командная строка
Для Linux & Unix System вы можете использовать,
ps -ef | grep process_name
чтобы получить полную командную строку.В системах SunOS, если вы хотите получить полную командную строку, вы можете использовать
Чтобы получить полную командную строку, вам нужно стать суперпользователем.
Список аргументов
предоставит подробный список аргументов, переданных процессу. Он выведет массив аргументов следующим образом:
Я не нашел подобной команды для Linux, но я использовал бы следующую команду, чтобы получить похожий вывод:
источник
В линуксе
Вы получите командную строку процесса (включая аргументы), но со всеми пробелами, замененными на символы NUL.
источник
Вы можете использовать
pgrep
с-f
(полная командная строка) и-l
(длинное описание):Этот метод имеет решающее значение с любым из других ответов: он работает на CygWin , так что вы можете использовать его , чтобы получить полную командную строку любого процесса , работающего под ОС Windows (выполняются как повышенные , если вы хотите данные о любом приподнятой процессе / администратора) , Любой другой способ сделать это в Windows более неудобен ( например ).
Более того: в моих тестах путь pgrep был единственной системой, которая работала для получения полного пути для скриптов, работающих внутри Python CygWin .
источник
$ exec -a fakename bash & [1] 14102 [1]+ Stopped exec -a fakename bash $ xargs -0 < /proc/14102/cmdline; fakename $ pgrep -l -f fakename; 14102 bash
pgrep from procps-ng 3.3.15
и3.3.12
. Просто печатает pid и prorgam name без аргументов.Другой вариант печати
/proc/PID/cmdline
с пробелами в Linux:Таким образом
cat
печатается символ NULL, а^@
затем вы заменяете их пробеломsed
;echo
печатает новую строку.источник
Вы можете просто использовать:
источник
Вместо того, чтобы использовать несколько команд для редактирования потока, просто используйте один - tr переводит один символ в другой:
источник
В дополнение ко всем вышеперечисленным способам преобразования текста, если вы просто используете «строки», он по умолчанию выводит на отдельные строки. С дополнительным преимуществом это может также предотвратить появление любых символов, которые могут зашифровать ваш терминал.
Оба вывода в одну команду:
strings / proc // cmdline / proc // environment
Реальный вопрос заключается в том ... есть ли способ увидеть реальную командную строку процесса в Linux, которая была изменена так, чтобы командная строка содержала измененный текст вместо фактической команды, которая была выполнена.
источник
На солярисе
подобное можно использовать в Unix-подобных системах.
источник
В Linux, с bash, для вывода в виде заключенных в кавычки аргументов, чтобы вы могли отредактировать команду и повторно запустить ее
На Solaris, с bash (протестировано с 3.2.51 (1) -релизом) и без пользовательского пространства GNU:
Пример Linux bash (вставить в терминал):
Вывод:
Пример Solaris Bash:
Вывод:
источник
Если вы хотите получить максимально возможную длину (не знаете, какие существуют ограничения), подобную паргам Solaris , вы можете использовать это в Linux и OSX:
источник
попробуйте
ps -n
в терминале Linux. Это покажет:1.Все процессы запущены , их командная строка и их PID
После этого вы будете знать, какой процесс убить
источник