Dalla pagina man di   shutdown   : 
 Upon shutdown, all running processes are sent a SIGTERM followed by a
 SIGKILL.  The SIGKILL will follow the SIGTERM by an intentionally inde-
 terminate period of time.  Programs are expected to take only enough time
 to flush all dirty data and exit.  Developers are encouraged to file a
 bug with the OS vendor, should they encounter an issue with this func-
 tionality.
 Quindi, da quanto ho capito, i processi possono essere uccisi prima che siano stati ripuliti correttamente. 
 Dalla pagina man di   launchctl   : 
  reboot [system|userspace|halt|logout|apps|reroot <mount-point>]
              Instructs launchd to begin tearing down userspace. With no argu-
              ment given or with the system argument given, launchd will make
              the reboot(2) system call when userspace has been completely
              torn down. With the halt argument given, launchd will make the
              reboot(2) system call when userspace has been completely torn
              down and pass the RB_HALT flag, halting the system and not ini-
              tiating a reboot.
 Questo è ciò che penso che lo spegnimento tramite il menu lo faccia, è meglio in quanto garantisce che tutti i processi userland siano terminati in modo pulito prima di arrestare / riavviare il sistema. 
 Sarei tentato di dire che il metodo   launchctl    è migliore, e il metodo   shutdown -h now     potrebbe  possibilmente causare alcune stranezze nel caso in cui un processo venga ucciso prima di ripulire correttamente.