You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Original bug ID: 1922 Reporter: administrator Status: closed Resolution: not a bug Priority: normal Severity: minor Category: ~DO NOT USE (was: OCaml general)
Bug description
exemple de source:
let print_info = fun s ->
begin
print_char '(';
print_int (Unix.getpid ());
print_string ") ";
print_string s
end;;
let f = fun () ->
begin
print_info "=====> f ()\n";
match Unix.fork() with
| 0 ->
begin
print_info "Fils\n";
exit 0;
failwith "sortie du fils"
end
| _ ->
begin
ignore (Unix.wait ());
print_info "Pere\n"
end
end;;
print_info "Debut\n";;
f ();;
print_info "Fin\n";;
compilation:
ocamlc unix.cma test.ml -cclib -linux -o t
version:
ocaml 3.06 (mandrake 9.1)
execution:
(3741) Debut
(3741) =====> f ()
(3742) Fils
(3741) Debut
(3741) =====> f ()
(3741) Pere
(3741) Fin
Commentaires:
Le pere s execute une seconde fois à chaque appel de Unix.fork, alors qui si
on pend un code similaire en C il se comporte normalement (cad qu il ne s
execute qu une seule fois).
Je suis tres curieux de comprendre ce qu'il se passe mais aussi de trouver un
moyen d eviter ce probleme.
Merci d avance.
The text was updated successfully, but these errors were encountered:
Le pere s execute une seconde fois à chaque appel de Unix.fork, alors qui si
on pend un code similaire en C il se comporte normalement (cad qu il ne s
execute qu une seule fois).
La conclusion est un peu hative.... La seule chose observée que les
messages d'impressions du père sont duppliqués.
En effet, comme ils ne sont pas flushés avant le fork, les messages du père
(non affichés) sont duppliqués chez le père et le fils, et donc afficher
après le fork à la fois par le père et le fils.
Pour l'observation, il suffit d'ajouter un flush à la fin de print_info.
Original bug ID: 1922
Reporter: administrator
Status: closed
Resolution: not a bug
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)
Bug description
exemple de source:
let print_info = fun s ->
begin
print_char '(';
print_int (Unix.getpid ());
print_string ") ";
print_string s
end;;
let f = fun () ->
begin
print_info "=====> f ()\n";
match Unix.fork() with
| 0 ->
begin
print_info "Fils\n";
exit 0;
failwith "sortie du fils"
end
| _ ->
begin
ignore (Unix.wait ());
print_info "Pere\n"
end
end;;
print_info "Debut\n";;
f ();;
print_info "Fin\n";;
compilation:
ocamlc unix.cma test.ml -cclib -linux -o t
version:
ocaml 3.06 (mandrake 9.1)
execution:
(3741) Debut
(3741) =====> f ()
(3742) Fils
(3741) Debut
(3741) =====> f ()
(3741) Pere
(3741) Fin
Commentaires:
Le pere s execute une seconde fois à chaque appel de Unix.fork, alors qui si
on pend un code similaire en C il se comporte normalement (cad qu il ne s
execute qu une seule fois).
Je suis tres curieux de comprendre ce qu'il se passe mais aussi de trouver un
moyen d eviter ce probleme.
Merci d avance.
The text was updated successfully, but these errors were encountered: