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

Кажется, что многие программисты довольны сохранением PID в файле , а затем позже прочитали и использовали PID, как будто гарантированно был тот же процесс. Похоже, общая идея заключается в том, что шансы достаточно хороши, чтобы игнорировать. Как я могу просто продемонстрировать эту проблему? Идеально таким образом, чтобы существующие сценарии оболочки можно было адаптировать, чтобы продемонстрировать это с минимумом проб и ошибок.

Пример манекена:

foo & pid=$! echo $pid > pidfile do kill $! sleep 1 & until [ $pid -eq $! ] kill "$(cat pidfile)" # Kills `sleep`, not `foo`! 

One Solution collect form web for “Как продемонстрировать недопустимые предположения PID?”

Использование exec – довольно хорошая демонстрация повторного использования PID:

 #!/bin/bash cat > foo << 'EOF' echo "Inside foo." sleep 5 exec ./bar EOF cat > bar << 'EOF' #!/bin/bash echo "Inside bar." sleep 5 EOF chmod a+x foo bar ./foo & while sleep 3; do [[ -f "/proc/$!/cmdline" ]] || break printf 'pid %d == %s\n' "$!" "$(tr '\0' ' ' < "/proc/$!/cmdline")" done rm foo bar 

Запуск этого скрипта дает следующее:

 $ ./script Inside foo. pid 4953 == /bin/bash ./script Inside bar. pid 4953 == /bin/bash /tmp/tmp.AvDLtMWYPy/bar pid 4953 == /bin/bash /tmp/tmp.AvDLtMWYPy/bar 

Вы можете выполнять произвольные программы, поэтому нет никакой гарантии (вообще), что процесс на этом ПИД-регуляторе одинаковый или даже схож.

  • Вызовите фоновый процесс обратно на stdout
  • Что может привести к тому, что каталоги в / var / run исчезнут / не будут созданы при запуске? (CentOS 7.3)
  • Выясните PID точного приложения node.js
  • Как найти, какие процессы выполняются пользователем прямо сейчас?
  • Почему SSH -t не ждет фоновых процессов?
  • Детерминированный метод, чтобы выяснить, находится ли какой-нибудь другой процесс в тюрьме chroot и где?
  • Запись внутри сокета, открытого другим процессом в Linux
  • Как я могу определить, какое индивидуальное ограничение ulimit имеет процесс?
  • В чем разница между командами ps и top?
  • Получить PID tcpdump в сценарии bash
  • Как переместить процесс из одного пространства имен в другое?
  • Interesting Posts

    Перенаправление портов с использованием iptables в Linux

    Неисправность определения параметров зоны брандмауэра OpenWRT

    Можем ли мы настраивать разные оболочки для разных пользователей в одном дистрибутиве Linux / Unix?

    Как получить имя текущего буфера в emacs?

    Понимание syslinux и разбиения

    Выключение так быстро на iMac

    Скопируйте только последнюю строку последовательного вывода из весовой шкалы rs232 в буфер обмена

    Как увеличить количество массивов семафоров в Linux?

    Как вы можете передавать параметры для работы в скрипте?

    Обмен файлами между Windows, Linux и Android через сеть

    Как производитель труб может сообщить потребителю трубки, что он достиг «Конец файла»? »(Un-named-pipe, not named-pipe)

    Оболочка: проверьте, существует ли подкаталог, затем выполните команду

    Как я могу сделать свою тему Zsh («fade») хорошо выглядеть в urxvt?

    Удалите несколько возможных суффиксов

    Извлечь два значения из вывода команды

    Linux и Unix - лучшая ОС в мире.