2014-02-20 2 views
0

Что-то вроде «int is_forking();» было бы неплохо =)Как узнать, работает ли процесс во время выполнения?

У меня проблема с тем, что malloc блокируется при вызове из вызова fork.

+0

Э? Вилка - это системный стол. 'kmalloc()' может вызываться изнутри, но не 'malloc()'. –

+1

Это звучит как общая проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –

+0

Ха-ха, но * Я ЗНАЮ * какое решение =) Хорошо, вот что я делаю. Я подключаю некоторые функции и записываю их в журнал, мой журнал идет kaput (malloc deadlock), если процесс находится в середине вилки. – djp

ответ

2

определение POSIX определяет:

С точки зрения приложения, вилка() вызов должен появиться атомное.

Таким образом, теоретически ничто иное (malloc или иное) не может происходить параллельно.

На практике, используя pthread_atfork(), чтобы предоставить свои собственные обратные вызовы для поддержания флага is_forking; вы можете установить этот флаг при вызове обратного вызова prepare и очистить его при вызове обратных вызовов .

+0

В bionic некоторые вещи происходят в части libc, как вызов cpuacct_add (https://android.googlesource.com/platform/bionic/+/40eabe2/libc/bionic/ fork.c) – djp

+0

@ djp Ahh. Вероятно, это место, где должна быть указана платформа. –

+0

@ djp, я соответствующим образом изменил свой ответ. –

Смежные вопросы