|
|
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Мож ктонить сталкивался с подобным эффектом от применения fork'a. Чёто непонятно ничё: както printf странно работает на самом деле. Вот сырец для опробывания (чёто типа того): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Внимание вопрос! Откуда два раза "forking process:"??? Заранее всем спасибо за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 13:35 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Не, вывод во какой: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 13:42 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Так у тебя основной поток идет по тому же коду что и дочерний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 13:57 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Где результат форка равняется нулю, это дочерний. По этому параметру их надо разделять в разные ветки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 13:59 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
По какому коду? Там ведь printf до развилки, вот в чём фишка то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:01 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Тогда, что тебе не нравится в выводе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:04 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Дак printf, который перед форком, должен вроде всего разок напечататься. Или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:07 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Misha TyurinДак printf, который перед форком, должен вроде всего разок напечататься. Или как? А... че-то я не обратил внимания. Мистика какая-то. У меня такого не было ни разу, и быть такого не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:12 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Дак ты попробуй то, что я там понаписал, и посмотри... Я тоже удивлён. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:14 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Misha TyurinДак ты попробуй то, что я там понаписал, и посмотри... Я тоже удивлён. Писал с форками программы и не раз. И все хорошо работало. А попробовать твою - не охота в линух перезагружаться. Может ты чего-то не догавариваешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:16 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Может и не договариваю, а фигня такая реально происходит. Почему понять трудно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:18 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Misha TyurinМожет и не договариваю, а фигня такая реально происходит. Почему понять трудно. Мне кажется дело вот в чем. У тебя оба потока лезут по одному коду и дружно залазят в принтф, там они карежат данные этого принтэфа, и поэтому результат получается непредскажуем. Это лишь одна из версий, из-за чего это случается. Попробуй поставить перед вторым принтэфом слиип на секунду, если это родительский поток ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:34 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Akh Мне кажется дело вот в чем. У тебя оба потока лезут по одному коду и дружно залазят в принтф, там они карежат данные этого принтэфа, и поэтому результат получается непредскажуем. Оригинал :D это интересно как можно залесть в printf а еще его и покарежить ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:39 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Короче, я уже тут много че делал и с этим кодом и подобными, тут есть вот какя фигня: !!!! если поставить "\n" выше развилки - ТО ВСЁ РОВНО, как и интуитовно понятно, а если как я привел в самом начале, то имеем то что получается, ВЫВОД ДВАЖДЫ того что не должно так выводится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:40 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Советую попробывать такой код - очень интересно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:42 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin !!!! если поставить "\n" выше развилки - ТО ВСЁ РОВНО, как и интуитовно понятно, Всмысле, двойного вывода нет? Т.е. во всем виновато то, что буфер вывода был не сброшен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:02 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
AKhдружно залазят в принтф Шел тут рядышком :) Оригинал :D это интересно как можно залесть в printf а еще его и покарежить ??? Не менее оригинально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:07 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Misha TyurinКороче, я уже тут много че делал и с этим кодом и подобными, тут есть вот какя фигня: !!!! если поставить "\n" выше развилки - ТО ВСЁ РОВНО, как и интуитовно понятно, а если как я привел в самом начале, то имеем то что получается, ВЫВОД ДВАЖДЫ того что не должно так выводится Очень даже правильное поведение. Несброшенный буфер printf наследуется процессом потомком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:07 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Да, как я понимаю этот буфер (точнее его свои копии) оба процесса использовали и когда потом он влешится то и выводится, но оба имеет в буфере первый принтф. Просто хочется услышать как там всё это на самом деле реально чё куда передается при "развилке". Сталкнулся с этим и ещё сильнее понял что нифига наверняка не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:08 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Видимо, буфер вывода входит в эти "таблицы страниц" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:14 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, вопрос снимаю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:16 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
Misha TyurinДа, как я понимаю этот буфер (точнее его свои копии) оба процесса использовали и когда потом он влешится то и выводится, но оба имеет в буфере первый принтф. Просто хочется услышать как там всё это на самом деле реально чё куда передается при "развилке". Сталкнулся с этим и ещё сильнее понял что нифига наверняка не знаю. В Linux на самом деле так: LINUX man fork fork creates a child process that differs from the parent process only in its PID and PPID , and in the fact that resource utilizations are set to 0. File locks and pending signals are not inherited. Under Linux, fork is implemented using copy-on-write pages, so the only penalty incurred by fork is the time and memory required to duplicate the parent's page tables, and to create a unique task struc- ture for the child. В AIX так: AIX man fork The fork subroutine creates a new process. The new process (child process) is an almost exact copy of the calling process (parent process). The child process inherits the following attributes from the parent process: * Environment * Close-on-exec flags (described in the exec (exec: execl, execle, execlp, execv, execve, execvp, or exect Subroutine) subroutine) * Signal handling settings (such as the SIG_DFL value, the SIG_IGN value, and the Function Address parameter) * Set user ID mode bit * Set group ID mode bit * Profiling on and off status * Nice value * All attached shared libraries * Process group ID * tty group ID (described in the exit (exit, atexit, unatexit, _exit, or _Exit Subroutine), atexit, or _exit subroutine, signal subroutine, and raise subroutine) * Current directory * Root directory * File-mode creation mask (described in the umask subroutine) * File size limit (described in the ulimit subroutine) * Attached shared memory segments (described in the shmat subroutine) * Attached mapped file segments (described in the shmat subroutine) * Debugger process ID and multiprocess flag if the parent process has multiprocess debugging enabled (described in the ptrace (ptrace, ptracex, ptrace64 Subroutine) subroutine). The child process differs from the parent process in the following ways: * The child process has only one user thread; it is the one that called the fork subroutine. * The child process has a unique process ID. * The child process ID does not match any active process group ID. * The child process has a different parent process ID. * Process locks, text locks, and data locks are not inherited by the child process. For information about locks, see the plock (plock Subroutine) subroutine. * If multiprocess debugging is turned on, the trace flags are inherited from the parent; otherwise, the trace flags are reset. For information about request 0, see the ptrace (ptrace, ptracex, ptrace64 Subroutine) subroutine. * The child process utime, stime, cutime, and cstime subroutines are set to 0. (For more information, see the getrusage (getrusage, getrusage64, times, or vtimes Subroutine), times, and vtimes subroutines.) * Any pending alarms are cleared in the child process. (For more information, see the incinterval (getinterval, incinterval, absinterval, resinc, resabs, alarm, ualarm, getitimer or setitimer Subroutine), setitimer (getinterval, incinterval, absinterval, resinc, resabs, alarm, ualarm, getitimer or setitimer Subroutine), and alarm (getinterval, incinterval, absinterval, resinc, resabs, alarm, ualarm, getitimer or setitimer Subroutine) subroutines.) * The set of signals pending for the child process is initialized to the empty set. * The child process can have its own copy of the message catalogue for the parent process. * The set of signals pending for the child process is initialized as an empty set. Attention: If you are using the fork or vfork subroutines with an Enhanced X-Windows, X Toolkit, or Motif application, open a separate display connection (socket) for the forked process. If the child process uses the same display connection as the parent, the X Server will not be able to interpret the resulting data. * The child process has its own copy of the file descriptors for the parent process. However, each file descriptor of the child process shares a common file pointer with the corresponding file descriptor of the parent process. * All semadj values are cleared. For information about semadj values, see the semop subroutine. Других Юниксов под рукой нет, предлагаю погугилить самостоятельно. А поведение у них приблизительно одинаковое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:38 |
|
||
|
Возникла проблемка
|
|||
|---|---|---|---|
|
#18+
flush надо делать, перевод строки не обязательно приводит к спросу буфера... __________________ For more information, please proceed to http://www.ot-e.biz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33766073&tid=2031116]: |
0ms |
get settings: |
4ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
178ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 517ms |

| 0 / 0 |
