LINUX.ORG.RU

Определение битности приложения, а также установка количества ядер CPU

 , , ,


0

1

У меня два вопроса: 1) Как определить 32-битное приложение или 64-битное в Linux? 2) Как установить количество используемых ядер для процесса (в Windows для этого можно использовать Диспетчер задач).

Как определить 32-битное приложение или 64-битное в Linux?

Посчитать биты.

mbivanyuk ★★★★★
()

Скажи честно, ты хотя бы попытался погуглить?

gasinvein ★★★
()

1)file
2)а х.з. Погугли в сторону nice — может он и умеет.

MimisGotAPlan
()

1) простейший скрипт, например

#!/bin/bash
if [ -e $1 ];
then
    	file $1 | grep 64-bit > /dev/null
        if [ $? != 0 ];
        then
            	echo '32-bit'
        else
            	echo '64-bit'
        fi
else
    	echo 'file not found'
fi

MikeWortin ★★
()
Ответ на: комментарий от MikeWortin

Или вот так, с проверкой на executable. (я не очень хорошо баш знаю, поэтому так)

#!/bin/bash
if [ -e $1 ];
then
    	file $1 | grep executable > /dev/null
        if [ $? != 0 ];
        then
            	echo 'not executable'
        else
            	file $1 | grep executable | grep 64-bit > /dev/null
                if [ $? != 0 ];
                then
                    	echo '32-bit'
                else
                    	echo '64-bit'
                fi
        fi
else
    	echo 'file not found'
fi

MikeWortin ★★
()

На вопрос 2) ты найдешь ответ, только если ядро пропатчишь!

Потому как больше ты никак не узнаешь, работают ли все N потоков процесса на N ядрах, или же они на N-M ядрах работают (т.е. N-M потоков работают, а M ждут своей очереди).

И что-то я сильно сомневаюсь, что в мастдайке реализовано иначе!

anonymous
()
Ответ на: комментарий от MikeWortin

Скрипт сфейлит, если в имени файла есть пробелы. $1 надо брать в кавычки, чтобы этого не происходило. Ну и при неудачном выполнении/ошибках следует возвращать ненулевой код возврата. Так что правильнее то, что ты имел в виду, будет как-то так:

#!/bin/sh
if [ ! -e "$1" ]; then
    echo "file not found: $1"
    exit 1
fi

if file "$1" | grep -v executable > /dev/null; then
    echo "file is not executable: $1"
    exit 2
fi

file "$1" | grep executable | grep 64-bit > /dev/null \
    && echo '64-bit' \
    || echo '32-bit'
Psych218 ★★★★★
()
$ LC_ALL=C readelf -h /bin/bash | awk '/Class/{print $2}'
ELF64
$ nproc
4
joy4eg ★★★★★
()

Как определить 32-битное приложение или 64-битное в Linux?

file

Как установить количество используемых ядер для процесса

Пусть этим занимается планировщик ядра

taskset
chrt

Dron ★★★★★
()
Ответ на: комментарий от Psych218

Так что правильнее то, что ты имел в виду, будет как-то так

Докопаться можно и до столба.

if [ ! -e «$1» ]; then

Это неправильная логика при отсутствии аргументов

echo «file not found: $1»

1. Так по английски не пишут.

2. Надо писать в stderr, потому надо добавить >&2

grep executable | grep 64-bit

grep -e executable -e 64-bit

И вообще, надо тут цикл по всем аргументам ;)

vodz ★★★★★
()
Ответ на: комментарий от vodz

Про >&2 подумал уже как отправил. Про отсутствие аргументов правильно подмечено.

grep -e executable -e 64-bit

Да там вообще grep executable лишнее. До этого же уже проверяется. Больше не надо.

И вообще, надо тут цикл по всем аргументам ;)

Угу. Вот мы и написали всем лором правильно «офигенно полезный» скрипт :D

Psych218 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.