powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Убить все порожденные процессы (Solaris)
12 сообщений из 12, страница 1 из 1
Убить все порожденные процессы (Solaris)
    #38284322
dimidrol99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть процесс который форкает произвольное количество других процессов. Каждый порожденный процесс может делать со своими обработчиками сигналов что угодно. Ну, демоном только не может стать. То есть у родителя работает waitpid на детей.
Родительскому процессу посылается kill -9 или он падает (отрубите мне пальцы :(( )
Есть идеи как аварийно завершить все порожденные процессы?
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38284327
dimidrol99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Язык - C
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38284395
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только если родитель сообщит ребенку свой пид, а ребенок будет периодически проверять жив еще родитель или нет.
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38284397
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще, если тебе нужны дети зависящие от родителя, то делай нити. Если делаешь отдельные процессы, то они по определению не зависят от родителя.
И кстати, даже если ты делаешь waitpid() в родителе, ребенок все равно может быть демоном. Просто в этом случае твой родитель тоже вынужденно станет демоном.
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38284503
dimidrol99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlИ вообще, если тебе нужны дети зависящие от родителя, то делай нити. Если делаешь отдельные процессы, то они по определению не зависят от родителя.
И кстати, даже если ты делаешь waitpid() в родителе, ребенок все равно может быть демоном. Просто в этом случае твой родитель тоже вынужденно станет демоном.
При демонизации ребенка родитель получит сигнал от "демонизатора", то есть поймет что управление от него ушло : fork1 -> fork2 -> exit1 -> waitpid0 -> порожденный процесс завершился (что там дальше делается - не интересно)
Вопрос - можно ли как-то уникально маркировать процесс?
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38287628
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimidrol99Есть процесс который форкает .... blablabla.....
kill -9 .... blablabla .....
Есть идеи как аварийно завершить все порожденные процессы?




Против kill -9 нет приема , так же как и против лома.
init обязан усыновить и упокоить деток безпредельщика пристреленного 9 сигналом.
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38287643
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimidrol99При демонизации ребенка родитель получит сигнал от "демонизатора", то есть поймет что управление от него ушло : fork1 -> fork2 -> exit1 -> waitpid0 -> порожденный процесс завершился (что там дальше делается - не интересно)Да, действительно.
dimidrol99Вопрос - можно ли как-то уникально маркировать процесс?В Линуксе есть prctl(). В Соларисе.... ыыы....
Ну если там есть glib, то можно попробовать g_set_prgname()/g_get_prgname()
В общем, для glib смотри тут: https://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38287954
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР
Против kill -9 нет приема , так же как и против лома.
init обязан усыновить и упокоить деток безпредельщика пристреленного 9 сигналом.


Вообще-то kill -9 вовсе не всесилен.
Просто хочу сообщить всем , чтобы не пугались, если что: бывают ситуации, когда посылка сигнала 9 не сразу или вообще не может остановить процесс.
Например, если процесс находиться внутри системного вызова, в ядре.
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38289988
dimidrol99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlВ Линуксе есть prctl(). В Соларисе.... ыыы....
Ну если там есть glib, то можно попробовать g_set_prgname()/g_get_prgname()
В общем, для glib смотри тут: https://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html
В Solaris тоже есть prctl. Только не понял как Вы его предлагаете использовать в данном случае.
Там новых свойств вроде добавлять нельзя.
И, кстати, вопрос о предоставлении прав root-а даже не обсуждается.
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38290869
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimidrol99White OwlВ Линуксе есть prctl(). В Соларисе.... ыыы....
Ну если там есть glib, то можно попробовать g_set_prgname()/g_get_prgname()
В общем, для glib смотри тут: https://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html
В Solaris тоже есть prctl. Только не понял как Вы его предлагаете использовать в данном случае.
Там новых свойств вроде добавлять нельзя.
PR_SET_NAME в качестве первого параметра. Стартовый процесс ставит себе уникальное имя. А дети потом сканируют список процессов, и если не находят процесса с таким именем - считаю что родитель умер.

А впрочем, исходную задачу можно решить проще.
Ребенок при старте делает getppid(), получает pid родителя. А потом периодически снова зовет getppid() как только получил pid от init'а (ну в общем-то любой не совпадающий со стартовым). Значит у родителя проблемы.
И рутом для этой операции быть не нужно.
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38291020
dimidrol99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlА впрочем, исходную задачу можно решить проще.
Ребенок при старте делает getppid(), получает pid родителя. А потом периодически снова зовет getppid() как только получил pid от init'а (ну в общем-то любой не совпадающий со стартовым). Значит у родителя проблемы.

Кстати да.
Но у меня задача немного с другой стороны.
Список pid-ов запущенных родителем есть после падения. Соответственно нужно попробовать вспомнить своих детей после поднятия :)
Думаю для точной идентификации достаточно сохранить еще и время старта ребенка, типа stat на /proc/;child_pid и оттуда st_ctime
...
Рейтинг: 0 / 0
Убить все порожденные процессы (Solaris)
    #38291469
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimidrol99White OwlА впрочем, исходную задачу можно решить проще.
Ребенок при старте делает getppid(), получает pid родителя. А потом периодически снова зовет getppid() как только получил pid от init'а (ну в общем-то любой не совпадающий со стартовым). Значит у родителя проблемы.

Кстати да.
Но у меня задача немного с другой стороны.
Список pid-ов запущенных родителем есть после падения. Соответственно нужно попробовать вспомнить своих детей после поднятия :)
Думаю для точной идентификации достаточно сохранить еще и время старта ребенка, типа stat на /proc/;child_pid и оттуда st_ctime

Незнаю как в солярке, в линухе вполне будет работать если в начале родителя стартануть процесс группу с помощью setpgid(0,0). И аварийно завершать родителя с помощью "pkill -9 -g <пид_родителя>".
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Убить все порожденные процессы (Solaris)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]