Что-то вроде «int is_forking();» было бы неплохо =)Как узнать, работает ли процесс во время выполнения?
У меня проблема с тем, что malloc блокируется при вызове из вызова fork.
Что-то вроде «int is_forking();» было бы неплохо =)Как узнать, работает ли процесс во время выполнения?
У меня проблема с тем, что malloc блокируется при вызове из вызова fork.
определение POSIX определяет:
С точки зрения приложения, вилка() вызов должен появиться атомное.
Таким образом, теоретически ничто иное (malloc или иное) не может происходить параллельно.
На практике, используя pthread_atfork()
, чтобы предоставить свои собственные обратные вызовы для поддержания флага is_forking
; вы можете установить этот флаг при вызове обратного вызова prepare
и очистить его при вызове обратных вызовов .
В bionic некоторые вещи происходят в части libc, как вызов cpuacct_add (https://android.googlesource.com/platform/bionic/+/40eabe2/libc/bionic/ fork.c) – djp
@ djp Ahh. Вероятно, это место, где должна быть указана платформа. –
@ djp, я соответствующим образом изменил свой ответ. –
Э? Вилка - это системный стол. 'kmalloc()' может вызываться изнутри, но не 'malloc()'. –
Это звучит как общая проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –
Ха-ха, но * Я ЗНАЮ * какое решение =) Хорошо, вот что я делаю. Я подключаю некоторые функции и записываю их в журнал, мой журнал идет kaput (malloc deadlock), если процесс находится в середине вилки. – djp