> то есть в процессе добавиться еще один тред? или как?
Нет. fork() создаст новый (child) процесс, в котором будет
единственный тред - тот, а котором был вызван fork() (точнее тот,
в который fork() вернется со значением 0).
В родительском процессе никаких новых тредов естественно не
добавится.
BTW, в child процессе может произойти deadlock (если конечно он
не делает просто exec() сразу после fork()). Чтобы этого не
случалось, для разруливания такой ситуации имееццо функция
pthread_atfork().
> в результате будет копия треда вызвавшего fork()
> копия всего процесса может быть сделана например forkall() OR
> fork1() в зависимости от платформы
Можно полюбопытствовать - на какой платформе fork1() дублирует
все треды процесса?
>BTW, в child процессе может произойти deadlock (если конечно он >не делает просто exec() сразу после fork()). Чтобы этого не >случалось, для разруливания такой ситуации имееццо функция >pthread_atfork().
Можно по-подробней, в каком случае получится deadlock?
> Можно по-подробней, в каком случае получится deadlock?
Deadlock получится, если например в каких-то тредах (отличных от того
треда, из которого делают fork) взяты мьютексы. В child процессе этих
тредов не будет и никто эти мьютексы разблокировать не сможет.
Само по себе это еще не жопа, но попытка взять этот заблокированный
мьютекс другим тредом вызовет блокировку.