Как продемонстрировать недопустимые предположения 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 

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

  • Один экземпляр скрипта, но только с одинаковыми аргументами
  • Почему процесс двоичного файла с разрешением только на выполнение остается скрытым в «ps» при использовании hidepid = 2, если пользователь не является root?
  • Запись и отображение информации о загрузочном процессе в Linux
  • Когда процесс перейдет в состояние «D»?
  • Получает ли этот диспетчер процесс зомби?
  • Определение конкретного процессора, на котором выполняется процесс
  • Открытие именованных блоков труб навсегда, если труба удалена без подключения
  • замените `while` более подходящей функцией, поэтому цикл будет ждать завершения каждого процесса
  • Что должны делать интерактивные оболочки в сиротских группах процессов?
  • Запросы о верхней команде
  • автоматические процессы убийства
  • Interesting Posts

    crontab -e не работает

    аутентификация открытого ключа без файла authorized_keys

    Is> & – эффективнее, чем> / dev / null?

    Захват вывода функции оболочки без подоболочки

    Как загрузить дубликаты изображений?

    Греческие символы в боковой панели mutt (имена почтовых ящиков, полученные через offlineimap)

    терминал История на один день

    Почему «strip» не удаляет заголовки разделов из исполняемых файлов ELF?

    Однокнопочный аудиозахват в Linux (за исключением ключевого релиза)

    FC16: невозможно войти в систему через LightDM или GDM (но «startx» отлично работает)

    kvm_open: невозможно открыть / proc

    Как изменить параметры монтирования в установке OpenBSD?

    полный rootfs на большом жестком диске, установка или обновление программного обеспечения невозможно

    Есть ли способ определить тип файла и открыть его с помощью графического интерфейса в терминале в Fedora?

    Сервер ретрансляции для общего трафика TCP?

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