Получение исходного вызова команды из /proc/self

Получение исходного вызова команды из /proc/self

Я пытаюсь запустить некоторый код запуска во всех процессах через динамический компоновщик.

Код должен делать что-то на основе нулевого аргумента процесса. Я получаю аргументы из /proc/self/cmdline(если вы знаете лучший способ получить к ним доступ вне main, пожалуйста, сообщите), однако у этого есть одна проблема:

Скрипты получают свой shebang (без #!) как нулевой аргумент, и в этом случае меня интересует следующий аргумент. Но как мне отличить интерпретируемые процессы от собственных?

решение1

Детали, из которых вы извлекаете, /proc/self/statusнаходятся в /proc/self/comm(без скриптов).

Для предполагаемого вопроса: определить, какие процессыинтерпретировали которые являютсяродной, вы не сможете сделать это, не зная, какие процессы должны бытьпереводчики. В конце концов, любой процесс может переименовать себя через execвызов, используя все, что ему угодно, в списке аргументов результирующего процесса. Вы могли быпредполагатьпутем сравнения /proc/self/exe(указывающего на исполняемый файл) со списком аргументов, но это будет лишь предположением, поскольку есть примеры, когда неинтерпретатор переименовывает своих потомков просто для того, чтобы сделать их использование более очевидным.

Дальнейшее чтение:

решение2

Кажется, процессы попадают Nameв

</proc/self/status |grep '^Name'

и имя, по-видимому, является именем basenameнастоящего нулевого аргумента.

(Я оставлю этот вопрос здесь на случай, если кто-то даст лучший ответ).

Связанный контент