В родительском потоке создаю поток предка. Убиваю родителя (kill PID), потомок тоже умирает. Мне нужно знать почему потомки не продолжают работать?
Чтобы память освобождалась, делаю потомку detach.
Т.е. всё работает как надо, но объяснить не могу.
alexander55
May 26 2008, 09:51
Цитата(2b|!2b?.. @ May 26 2008, 12:05)
В родительском потоке создаю поток предка. Убиваю родителя (kill PID), потомок тоже умирает.
fork только создает процесс с того же места (раздваивается), а функции семейства еxec уже запускают указанную задачу. Посмотрите под башем командами ps ps -l какие процессы крутятся до и после. Процессы закрутите и снимайте их kill номер процесса. Все прояснится. PS. Только сейчас увидел "uCLinux". Про него я не в курсе.
RCray
May 26 2008, 13:06
Цитата(alexander55 @ May 26 2008, 13:51)
fork только создает процесс с того же места (раздваивается), а функции семейства еxec уже запускают указанную задачу. Посмотрите под башем командами ps ps -l какие процессы крутятся до и после. Процессы закрутите и снимайте их kill номер процесса. Все прояснится. PS. Только сейчас увидел "uCLinux". Про него я не в курсе.
uClinux. работаю с библиотекой pthread.
Harbour
May 26 2008, 13:24
похоже что сигнал (от kill) посылается и потомку - перхватывать SIGTERM/SIGINT в потомке не пробовали ?
RCray
May 28 2008, 15:30
Цитата(Harbour @ May 26 2008, 17:24)
похоже что сигнал (от kill) посылается и потомку - перхватывать SIGTERM/SIGINT в потомке не пробовали ?
может быть. не стал разбираться, сделал всё по чесноку - убиенный родитель (kill -15 PID) делает pthread_cancel всем потомкам. потомки в свою очередь detach'ены. родитель дожидается от каждого самописный my_pthread_join. тем самым ресурсы при любом раскладе (потомки завершаются штатно или принудительно) остаются в полном порядке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.