method run command ?(reset=false) (f_on_end : int -> unit) =
      let thread_run () =
        let on_end code =
          Mutex.unlock mutex;
          ignore(self#insert "");
          f_on_end code;
        in
        Mutex.lock mutex;
        if reset then self#reset;
        run_and_read_in_buffer command self#insert on_end;
      in
      ignore(Thread.create thread_run ())