/proc/PID/cmdline: границы аргументов и нулевые байты
Исследуйте аргументы процесса без потери границ: прочитайте NUL-разделённый cmdline в Bash и объясните, почему эта строка не является журналом запуска.
Где заканчивается один аргумент
В отчёте поддержки путь с пробелом может выглядеть как два аргумента. Обычная строка с пробелами не сохраняет границы исходного массива. Чтобы понять, что действительно видно у процесса, нужно читать разделители, а не догадываться по внешнему виду.
Возьмём собственную оболочку как доступный объект. Цель опыта — показать каждый найденный аргумент отдельной записью. Он не запускает показанную команду заново и не требует копировать полный вывод чужого сервиса.
cmdline хранит не команду для повторного исполнения
Обычно /proc/PID/cmdline содержит строки аргументов, разделённые байтом NUL. У процесса-зомби файл пуст. Работающая программа может изменить доступное здесь содержимое, поэтому cmdline не служит неизменным свидетельством первоначального запуска.
Bash не хранит NUL внутри обычной переменной. Поэтому захват всего файла через command substitution теряет нужный формат. В цикле read с пустым разделителем каждый NUL завершает отдельный аргумент; printf с форматом %q делает пробелы и управляющие символы заметными.
Покажите аргументы по одному
Команды предназначены для Bash. Перенаправление подаёт файл прямо в цикл встроенных команд; префикс arg позволяет отличать записи от прочих сообщений терминала.
argument_pid=$$
while IFS= read -r -d "" argument; do
printf "arg: %q\n" "$argument"
done < "/proc/$argument_pid/cmdline"Сохраните границы, а не внешнее сходство
У одной оболочки список окажется коротким, у другой будет содержать опции запуска. Это зависит от способа открытия терминала. Экранирование в выводе добавил printf для удобного чтения; оно не доказывает, что пользователь вводил ровно такие кавычки.
Для отчёта о неверном пути достаточно отметить номер спорного аргумента и его проверенное значение. Не превращайте весь список в строку для eval: аргументы могут содержать произвольный текст. Если файл выглядит необычно или пуст, сначала уточните состояние и идентичность процесса.
Проверьте своё рассуждение
Задача: один аргумент содержит перевод строки. Будет ли простая замена NUL на перевод строки надёжно отличать его от двух аргументов?
Нет. Одинаковый вид разделителя и символа внутри данных создаёт неоднозначность. Цикл с чтением NUL и представлением %q сохраняет видимую границу каждой записи в этом опыте.
Не публикуйте секреты из аргументов
Некоторые программы получают токены или пароли через параметры запуска. Перед передачей отчёта исключите чувствительные значения. Пример не обходит ограничения доступа и не обещает восстановить историю запуска: он показывает лишь доступное содержимое cmdline во время чтения.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Linux man-pages — proc_pid_cmdline(5)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Нужны собственная Linux-система, смонтированный procfs и Bash. Доступность полей зависит от ядра, его конфигурации, прав и пространств имён. Примеры только читают диагностические интерфейсы; браузерный симулятор их не реализует.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.