On écrit une fonction générale qui redémarre le dernier processsus lancé si celui-ci est arrêté.
      
let continue_last_process finish =
  with_blocked_sigchld
    (fun () ->
      try
        clear_process_table();
        let p = last_process() in
        begin match p.status with
        | Some (WSTOPPED s) -> kill p.pid sigcont
        | _ -> () (* nécessairement None après clear_proces_table *)
        end;
        finish p
      with Not_found -> prerr_endline "No bg jobs"; 127
    ) ();;
La mise en tâche frontale doit retirer le processus de la table des tâche de fond puis se mettre en attente comme le faisait la command_wait.
      
let fg() =
  continue_last_process
    (fun p ->
      Printf.eprintf "Foregrounded job [%d] %s\n" p.pid p.cmd;
      flush Pervasives.stderr;
      remove_process p.pid;
      finish_fg p);;