Как контролировать последний PID, присвоенный ядром?

Нет, нет такой опции, также это не должно иметь никого.

Если необходимо измерить это, необходимо сначала знать, сколько файлов присутствует в системе, которая означает цикл через все дважды, это может быть медленно

Один evicent пример - это при извлечении исходного кода ядра с file-roller, это медленнее, чем выполнение того же самого с tar непосредственно, потому что ролик файла должен зарегистрировать все файлы сначала (иначе, индикатор выполнения мог бы быть неправильно отображен), и Вы ожидаете некоторое время, прежде чем процесс извлечения на самом деле начался.

3
15.05.2013, 15:48
2 ответа

Это сохраняет метку времени и последний PID в файл каждую секунду в Bash:

if [ -r /proc/sys/kernel/ns_last_pid ]
then
    while true
    do
        while read
        do
            if [ "$REPLY" != "$old" ]
            then
                printf '%(%s)T %d\n' -1 "$REPLY"
                old="$REPLY"
            fi
        done < /proc/sys/kernel/ns_last_pid
        read -t 1 || true
    done > pids.log
fi

Проблемы:

  • Я не уверен если ns_last_pid корректное число. Документация не является четкой мне:

    Последний pid выделил в токе (одна задача с помощью этого sysctl жизни в) изодромное с предварением пространство имен.

  • /proc/sys/kernel/ns_last_pid является только доступным в Linux 3.3 и более новым
  • POSIX read не имеет -t опция.
  • Не может использовать sleep, cat или другой non-builtins, так как они использовали бы дополнительный PIDs.
4
27.01.2020, 21:14
  • 1
    /proc/sys/kernel/ns_last_pid не доступен везде. Прежде всего/proc только доступен на Linux... –  a CVn 14.05.2013, 17:47
  • 2
    Все идиомы неPOSIX там были на самом деле одолжены bash от оболочки Korn. Таким образом, это не bash конкретный, ksh93/bash конкретный. Отметьте это sleep встроено в ksh93 и это также имеет a cat встроенный (только включил если /opt/ast/bin прежде /bin (или везде, где система cat ) в $PATH). POSIX не указывает, какие команды встроены. –  Stéphane Chazelas 14.05.2013, 18:01
  • 3
    Нечетный, у меня нет того файла на нескольких флажках Linux, которые я установил, но у них действительно есть изодромная с предварением поддержка пространства имен. Каждый даже использует пространства имен... –  derobert 14.05.2013, 18:38
  • 4
    Тот файл не существует ни на каких дистрибутивах Red Hat, которые я имею (Fedora 14,17 + CentOS 5,6). Ubuntu 12.10 имеет его. –  slm♦ 14.05.2013, 21:50

POSIX не позволяет присваивать последний PID ядром, таким образом, не может быть портативного ответа.

Вот острота, которая должна работать над всеми системами, реализовывая dtrace (Солярис, FreeBSD, NetBSD, Mac OS X, Oracle Linux с последним UEK, и другие как Illumos основывали Ose, Linux с dtrace4linux),

# dtrace -qn 'proc:::exec-success { printf("%Y - %d\n",walltimestamp,pid); }'
2013 May 15 00:48:47 - 1276
2013 May 15 00:48:49 - 1277
2013 May 15 00:48:52 - 1278

Править:

На Linux альтернатива должна была бы использовать systemtap при наличии, которым эта (непротестированная) команда должна предоставить подобному выводу:

# stap -e 'probe syscall.execve { printf("%s - %d\n",ctime(gettimeofday_s()),pid()); }'
2
27.01.2020, 21:14
  • 1
    @l0b0, Как я записал, Вам нужна ОС с dtrace, установленным, который является, очевидно, не случаем с Вашей тестовой машиной. Существует несколько dtrace реализаций с Linux: Oracle Linux 6.4 с UEK и dtrace4linux. Вы могли бы также использовать systemtap. Ответ обновляется. –  jlliagre 15.05.2013, 12:19
  • 2
    @l0b0 обновил снова, я все еще не уверен в том, если pid нужно назвать как функция или использовать в качестве переменной. –  jlliagre 15.05.2013, 13:24
  • 3
    Нет никакой синтаксической ошибки больше, но "отсутствующий x86_64 ядро/модуль debuginfo под '/lib/modules/3.5.0-27-generic/build' при разрешении, что датчик указывает на kernel.function ("do_execve") .call". apt-cache search debuginfo не показывает ничего полезного, таким образом, я предполагаю, что это не возможно на моем дистрибутиве. –  l0b0 15.05.2013, 13:53
  • 4
    @l0b0 Вашим вопросом является отмеченный POSIX и как я записал, не может быть POSIX способ соответствовать Вашим требованиям. Вы сказали бы, каково Ваше распределение. –  jlliagre 15.05.2013, 15:27

Теги

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