Заглянуть /proc/$pid/maps
. Диапазоны адресов по 32-разрядным адресам (8 шестнадцатеричных цифр) или 64-разрядным адресам (16 шестнадцатеричных цифр). Это работает на любой вид исполняемого файла, независимо от того, что формат. Можно только получить информацию о процессах, работающих как тот же пользователь (если Вы не корень).
if ! [ -e /proc/$pid/maps ]; then
echo No such process
elif grep -q '^........[^-]' /proc/$pid/maps; then
echo 64-bit
elif grep -q . /proc/$pid/maps; then
echo 32-bit
else
echo Insufficient permissions
fi
Если у Вас нет разрешения получить доступ к этому файлу, то я думаю, что единственный путь состоит в том, чтобы попытаться проанализировать исполняемый файл. (В то время как можно всегда читать /proc/$pid/stat
, ни одно из полей, которые показывают для процессов, работающих как различные пользователи, не показывает диаметр долота процесса.) Можно высказать хорошее предположение исполняемого файла процесса с ps -o comm=
, и поиск этого в PATH
— но остерегайтесь этого, процесс, возможно, был запущен с другим PATH
, или, возможно, переписал argv[0]
. Можно затем проанализировать исполняемый файл — если Вы готовы принять ELF, посмотреть на 5-й байт.