Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

module Unix: double execution de pere apres fork #8363

Closed
vicuna opened this issue Nov 9, 2003 · 1 comment
Closed

module Unix: double execution de pere apres fork #8363

vicuna opened this issue Nov 9, 2003 · 1 comment
Labels

Comments

@vicuna
Copy link

vicuna commented Nov 9, 2003

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.

@vicuna
Copy link
Author

vicuna commented Nov 10, 2003

Comment author: administrator

david.doose@free.fr writes:


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).

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.

    Didier

@vicuna vicuna closed this as completed Nov 12, 2003
@vicuna vicuna added the bug label Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant