Я работаю над запуском Redis на Solaris 10, и есть несколько тестов интеграции, которые не работают. Тест, который я рассматриваю, работает следующим образом:
- Запуск Redis
- Он разветвляется, и дочерний элемент начинает сбрасывать базу данных в файл резервной копии (RDB)
- На самом деле происходят отношения родитель / ребенок / внук, в которых внук становится зомбом ie, но я заметил это всего за несколько минут до того, как мне пришлось отправиться домой.
- Через короткое время тестовый скрипт отправляет SIGTERM дочернему элементу
- Ребенок улавливает сигнал и корректно завершает работу
- Родитель вызывает wait3 ()
Несмотря на вызов wait3()
, ребенок оказывается в состоянии зомба ie.
Тест терпит неудачу примерно в 90% случаев, когда я его запускаю. Как только он попадает в неисправное состояние, он никогда не восстанавливается. Я попытался изменить тест, чтобы он ждал значительно дольше, и, хотя он, кажется, вызывает wait3 () много раз после выхода из процесса, он остается в этом состоянии до тех пор, пока родительский процесс (-ы) не будут убиты.
К сожалению, я выиграл Я не смогу поработать над этим снова до следующей недели, поэтому исследую это дома. В большинстве случаев я искал в Google только документацию или "почему процессы становятся зомби?" введите вопросы.
Эта ветка групп Google из середины 90-х может помочь, хотя в основном речь идет о более старых версиях Solaris / SunOS.