Определение конкретного процессора, на котором работает процесс

Как я понял, мы не знаем заранее, что является датой модификации. Таким образом, мы должны получить его из каждого файла, отформатировать вывод и переименовать каждый файл способом так, чтобы это включало дату модификации в имена файлов.

Можно сохранить этот сценарий как что-то как "modif_date.sh" и сделать его исполняемым файлом. Мы вызываем его с целевым каталогом как аргумент:

modif_date.sh txt_collection

Где "txt_collection" является названием каталога, где у нас есть все файлы, которые мы хотим переименовать.

#!/bin/sh

# Override any locale setting to get known month names
export LC_ALL=c
# First we check for the argument
if [ -z "$1" ]; then
    echo "Usage: $0 directory"
    exit 1
fi

# Here we check if the argument is an absolute or relative path. It works both ways
case "${1}" in
  /*) work_dir=${1};;
  *) work_dir=${PWD}/${1};;
esac

# We need a for loop to treat file by file inside our target directory
for i in *; do
    # If the modification date is in the same year, "ls -l" shows us the timestamp.
    # So in this case we use our current year. 
    test_year=`ls -Ggl "${work_dir}/${i}" | awk '{ print $6 }'`
    case ${test_year} in *:*) 
        modif_year=`date '+%Y'`
        ;;
    *)
        modif_year=${test_year}
        ;;
    esac
    # The month output from "ls -l" is in short names. We convert it to numbers.
    name_month=`ls -Ggl "${work_dir}/${i}" | awk '{ print $4 }'`
    case ${name_month} in
            Jan) num_month=01 ;;
            Feb) num_month=02 ;;
        Mar) num_month=03 ;;
        Apr) num_month=04 ;;
        May) num_month=05 ;;
        Jun) num_month=06 ;;
        Jul) num_month=07 ;;
        Aug) num_month=08 ;;
        Sep) num_month=09 ;;
        Oct) num_month=10 ;;
        Nov) num_month=11 ;;
        Dec) num_month=12 ;;
        *) echo "ERROR!"; exit 1 ;;
    esac
    # Here is the date we will use for each file
    modif_date=`ls -Ggl "${work_dir}/${i}" | awk '{ print $5 }'`${num_month}${modif_year}
    # And finally, here we actually rename each file to include
    # the last modification date as part of the filename.
    mv "${work_dir}/${i}" "${work_dir}/${i}-${modif_date}"
done
8
16.06.2013, 02:34
4 ответа

ps может дать Вам, что информация, если Вы просите psr столбец (или использование -F флаг, который включает его).

Исключая:

$ ps -F $$
UID        PID  PPID  C    SZ   RSS PSR STIME TTY      STAT   TIME CMD
me        6415  6413  0  5210  2624   2 18:52 pts/0    SN     0:00 -su

Или:

$ ps -o pid,psr,comm -p $$
  PID PSR COMMAND
 6415   0 bash

Моя оболочка работала на ЦП 2, когда я выполнил первую команду на ЦП 0, когда я выполнил второе. Остерегайтесь, который обрабатывает, может изменить центральные процессоры очень, очень быстро, таким образом, информация, которую Вы на самом деле видите, является, по существу, уже устаревшей.

Еще некоторая информация в этом Суперпользователе ответы вопроса:

Linux: команда для знания числа процессора, в котором загружается процесс?

10
27.01.2020, 20:09

С top от procps (обычно значение по умолчанию на дистрибутивах Linux в наше время), в top, нажмите f, перейдите к P = Last User CPU (SMP) и нажмите Space для выбора (можно также переместить поле, например, перед COMMAND поле с Правильным ключом и затем перемещается вверх и вниз). q для возврата к основному экрану (где Вы будете видеть, что Ваш процесс перемещается с процессора на процессор, если Вы явно не настроили его для пребывания с одним). Можно нажать W для сохранения этого как значения по умолчанию.

Нажать? для справки.

4
27.01.2020, 20:09

Команда taskset то, что Вы ищете:

taskset - получите или установите привязку ЦП процесса

Пример

$ taskset -p 12345
pid 12345's current affinity mask: f

Маска f средства все процессоры, 0x00000001 был бы просто процессор 0.

$ taskset -c -p 24389 
pid 24389's current affinity list: 0-3

Показывает CPU в формате списка. У меня есть 4 ядра на моем ноутбуке в этом примере.

Посмотрите, что страница справочника имеет больше деталей.

4
27.01.2020, 20:09

Вы также можете получить эта информация прямо из / proc / [pid] / stat . Это 39-й пробел. imited field (начиная с Linux 2.2.8).

Например. для отображения процессора, на котором запущена текущая оболочка (в данном случае):

cat  /proc/$$/stat | cut -d' ' -f39
2
20.08.2021, 13:10

Теги

Похожие вопросы