Bash: получить канонический путь и аргументы из pid

Есть ли простой способ получить канонический путь и аргументы, с которыми был запущен определенный процесс (pid).

Например, для процесса 1445 я бы хотел получить: /usr/bin/xclock -digital

Я думал о следующем:

$ ls -l /proc/1445 | grep exe

чтобы получить что-то вроде ....... -> /usr/bin/xclock

а потом

$ ps 1445 | cut -b 28- | tail -n 1

чтобы получить xclock -digital

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

И помощь будет принята с благодарностью.


person T. Bone    schedule 24.05.2016    source источник


Ответы (1)


Вы можете проанализировать содержимое /proc/$PID/cmdline, чтобы получить путь и аргументы (см. Как разбирать / proc / pid / cmdline для более подробной информации).

Канонический путь можно получить с помощью realpath(1).

person blatinox    schedule 24.05.2016
comment
Будет ли это работать, если PATH во время выполнения, например. xclock был настроен на использование xclock, отличного от, например, / home / user / bin / xclock? (с другим xclock в / usr / bin в обычном ПУТИ). Или для этого потребуется дальнейший анализ среды из вывода ps? - person Stefan Hegny; 24.05.2016
comment
Да, он должен работать, но вы не узнаете, какой xclock работает, если просто вызовете xclock. Чтобы узнать, какая программа запущена, вы можете посмотреть /proc/$PID/exe. - person blatinox; 24.05.2016