Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
Есть процесс который форкает произвольное количество других процессов. Каждый порожденный процесс может делать со своими обработчиками сигналов что угодно. Ну, демоном только не может стать. То есть у родителя работает waitpid на детей. Родительскому процессу посылается kill -9 или он падает (отрубите мне пальцы :(( ) Есть идеи как аварийно завершить все порожденные процессы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 20:01 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
Язык - C ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 20:03 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
Только если родитель сообщит ребенку свой пид, а ребенок будет периодически проверять жив еще родитель или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 22:04 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
И вообще, если тебе нужны дети зависящие от родителя, то делай нити. Если делаешь отдельные процессы, то они по определению не зависят от родителя. И кстати, даже если ты делаешь waitpid() в родителе, ребенок все равно может быть демоном. Просто в этом случае твой родитель тоже вынужденно станет демоном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 22:07 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
White OwlИ вообще, если тебе нужны дети зависящие от родителя, то делай нити. Если делаешь отдельные процессы, то они по определению не зависят от родителя. И кстати, даже если ты делаешь waitpid() в родителе, ребенок все равно может быть демоном. Просто в этом случае твой родитель тоже вынужденно станет демоном. При демонизации ребенка родитель получит сигнал от "демонизатора", то есть поймет что управление от него ушло : fork1 -> fork2 -> exit1 -> waitpid0 -> порожденный процесс завершился (что там дальше делается - не интересно) Вопрос - можно ли как-то уникально маркировать процесс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2013, 00:23 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
dimidrol99Есть процесс который форкает .... blablabla..... kill -9 .... blablabla ..... Есть идеи как аварийно завершить все порожденные процессы? Против kill -9 нет приема , так же как и против лома. init обязан усыновить и упокоить деток безпредельщика пристреленного 9 сигналом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 00:05 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 00:27 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
ДохтаР Против kill -9 нет приема , так же как и против лома. init обязан усыновить и упокоить деток безпредельщика пристреленного 9 сигналом. Вообще-то kill -9 вовсе не всесилен. Просто хочу сообщить всем , чтобы не пугались, если что: бывают ситуации, когда посылка сигнала 9 не сразу или вообще не может остановить процесс. Например, если процесс находиться внутри системного вызова, в ядре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 11:02 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
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-а даже не обсуждается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2013, 12:27 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
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'а (ну в общем-то любой не совпадающий со стартовым). Значит у родителя проблемы. И рутом для этой операции быть не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2013, 18:02 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
White OwlА впрочем, исходную задачу можно решить проще. Ребенок при старте делает getppid(), получает pid родителя. А потом периодически снова зовет getppid() как только получил pid от init'а (ну в общем-то любой не совпадающий со стартовым). Значит у родителя проблемы. Кстати да. Но у меня задача немного с другой стороны. Список pid-ов запущенных родителем есть после падения. Соответственно нужно попробовать вспомнить своих детей после поднятия :) Думаю для точной идентификации достаточно сохранить еще и время старта ребенка, типа stat на /proc/;child_pid и оттуда st_ctime ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2013, 20:33 |
|
||
|
Убить все порожденные процессы (Solaris)
|
|||
|---|---|---|---|
|
#18+
dimidrol99White OwlА впрочем, исходную задачу можно решить проще. Ребенок при старте делает getppid(), получает pid родителя. А потом периодически снова зовет getppid() как только получил pid от init'а (ну в общем-то любой не совпадающий со стартовым). Значит у родителя проблемы. Кстати да. Но у меня задача немного с другой стороны. Список pid-ов запущенных родителем есть после падения. Соответственно нужно попробовать вспомнить своих детей после поднятия :) Думаю для точной идентификации достаточно сохранить еще и время старта ребенка, типа stat на /proc/;child_pid и оттуда st_ctime Незнаю как в солярке, в линухе вполне будет работать если в начале родителя стартануть процесс группу с помощью setpgid(0,0). И аварийно завершать родителя с помощью "pkill -9 -g <пид_родителя>". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2013, 21:38 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38284327&tid=2020154]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 279ms |

| 0 / 0 |
