Почему следующие две команды PS дают разное поле «Cmd»?

Sed обрабатывает вводить построчно. В Perl проще обрабатывать весь файл сразу:

perl -0777 -pe 's=<script>.*?\n.*?</script>==sg'
  • -0777 читает весь файл
  • ? после того, как * делает его «экономным», т.е. кратчайшая возможная строка.
  • / с составляет . соответствует новой строке, чего обычно не происходит.

Обратите внимание, что он может сломаться, если сценарий содержит в комментарии или кавычках. Лучше бы HTML разобрать.

0
03.01.2019, 21:28
3 ответа

screenпереименовывает свой основной (серверный )процесс SCREEN, чтобы отличить его от более поздних клиентов.

Это очень косвенно упоминается однажды на странице руководства:

Note that this command only affects debugging output from the main "SCREEN" process correctly. Debug output from attacher processes can only be turned off once and forever.

, но, как ни странно, нигде прямо не упоминается.

psи ps -fотображают разные вещи для CMD :имя исполняемого файла (ps, спецификатор формата "command" )и восстановленную командную строку (ps -f, спецификатор формата "args" ). Последний использует ARGV процесса и видит его изменения, в то время как само имя исполняемого файла остается неизменным.

6
28.01.2020, 02:13

ps -A использует формат по умолчанию, который показывает pid, терминал, кумулятивное процессорное время и имя исполняемого файла (ucmd). Имя исполняемого файла не подлежит изменению и точно отражает имя используемого исполняемого файла.

ps -Afиспользует полный формат, который среди других полей показывает полную команду с аргументами(commилиargs). Полную команду можно изменить, и, как объяснено в ответе Майкла Гомера , screen, она изменяет ее, чтобы показать, является ли процесс клиентом или сервером.

Чтобы найти screenпроцессы и определить их назначение, используйте

ps -fC screen

Это показывает полную информацию о процессах, имя исполняемого файла которых соответствует screen.

2
28.01.2020, 02:13

Нет.

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

Они показывают столбцы cmdи ucmd, два разных фрагмента информации. К сожалению, и программа GNU ps, и программа FreeBSD psвносят здесь путаницу.

Ядра, такие как Linux и ядра BSD, предоставляют четыре (релевантных )фрагмента информации о процессе через файлы в /procиsysctl():

  • короткое имя образа программы, также известное как короткое имя, используемое для учета процессов;
  • его строки аргументов, инициализированные execve()и изменяемые во время выполнения;
  • его строки окружения, инициализированные execve()и изменяемые во время выполнения; и
  • полный путь к исполняемому файлу образа программы.

Строки аргументов и строки окружения можно изменять во время выполнения способами, описанными вhttps://unix.stackexchange.com/a/438007/5132и https://unix.stackexchange.com/a/432681/5132. Linux также позволяет изменять имя учета процесса.

GNU Screen изменил строки своих аргументов, так что первая из них читается как «SCREEN», а не имя учета процесса, которое осталось как «экран».

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

  • Столбец с именами commandи argsсодержит строки аргументов, а также строки среды, если используется параметр e, а также имя учета в квадратных скобках, если оно не соответствует первой из строк аргументов. ; все с префиксом древовидной диаграммы, если используется опция dи это последний столбец.
  • Столбец с именами ucommи commсодержит учетное имя процесса.

GNU psдобавляет cmdв качестве псевдонима для первого и ucmdв качестве псевдонима для второго. Он помещает древовидную диаграмму и строки среды в оба столбца и всегда помещает древовидную диаграмму, даже если столбец , а не последний столбец.

В GNU psпараметр -f(, который не следует путать с параметром f-Afв вопросе, является просто сокращением для указания другого набора столбцов для psдля печати. Набор столбцов по умолчанию включает ucmd. Набор, используемый при использовании опции -f, вместо этого включает cmd.

Руководство для BSD psизлагает это явно, давая точные столбцы, выбранные его сокращениями -j, -l, -uи -v. В руководстве для GNU psупоминаются «полный формат», «формат заданий», «длинный формат» и «пользовательский формат», но явно не указывается, к какому набору столбцов относится каждый из них.

Чтобы еще больше запутать,и GNU ps, и FreeBSD psне используют имена столбцов, используемые в командной строке, в заголовках столбцов, указанных в их выходных данных. Таким образом, часто нельзя определить только по заголовку столбца, какой столбец на самом деле отображается.

  • FreeBSD psпомечает столбец имени учета либо UCOMM, либо COMMAND, но также помечает столбец строк аргументов COMMAND.
  • GNU psпомечает столбец строк аргументов как CMDили COMMAND, но также помечает столбец имени учета как CMDили COMMAND.

(Для сравнения s6-psЛорана Берко содержит только comm, argsи envс фиксированными и отдельными метками заголовков COMM, COMMANDи ENVIRONMENT, что дает только первый три из четырех порций информации из ядра напрямую, без их объединения.)

  • Лоран Берко (2014 ).s6-ps. s6 -linux -утилиты . Программное обеспечение.
4
28.01.2020, 02:13

Теги

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