Рассмотрим следующие строки из "ps auxwww"
вывод:
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
root 4262 0.0 0,1 76592 1104 s005 Ss 10:02am 0:00.03 login -pf yo
yo 4263 0.0 0,0 75964 956 s005 S 10:02am 0:00.03 -bash
Вопрос 1: Как заставить ps развернуть все команды в столбце COMMAND до их полных имен путей? Я хочу, чтобы логин был разрешен в / usr / bin / login, а bash - в / bin / bash.
Вопрос 2: Есть ли в MacOS X аналог procfs? То есть - существует ли файловый механизм для простого получения информации о процессе?
Попробуйте вместо этого:
ps ax -o pid, cmd
Вы можете переформатировать его по своему усмотрению (подробности см. На странице руководства).
Наконец, я думаю, что ps (и даже cat / proc / * / cmdline) сообщит о команде, как она была запущена. Таким образом, если не был указан полный путь, он будет отображаться как просто «команда» вместо «/ путь / к / команде».
Во-первых, процессы могут изменить заголовок, о котором сообщает ps
так что он сам по себе не очень надежен. Вы можете попробовать переменные среды, используя флаг «e».
ps auxwwwe
Внутри них должна быть встроенная переменная '_', как описано здесь.
Для каждой команды, выполняемой как дочерняя оболочка оболочки, sh устанавливает для этой переменной полный путь к исполняемому файлу и передает это значение через среду этому дочернему процессу.
Это верно как для sh в BSD, так и для Linux. Я считаю, что это не может быть перезаписано пользователем. Однако его доступность может зависеть от выбора оболочки пользователем, это довольно неприятно и YMMV.
OSX не имеет собственной procfs. Есть порт на базе FUSE. Подробности можно узнать Вот. Опять ЫММВ.
извлечь все идентификаторы процессов и полный путь из / proc:
ls -l /proc/*/exe 2>/dev/null | awk '{print $8 " " $10}'
Прекратите возиться с пс и использовать cat / proc / pid / cmdline .
Вы можете использовать подстановочные знаки, такие как / proc / * / cmdline.