Move check for arguments to the beginning of the function.
replace printf by a call to CLog::Log()
fork() may fail, check for return value.
execvp() may fail, check for return value and properly exit from child process.
A single terminating NULL pointer is sufficient
Implement FIXME: implement CUtil::SudoCommand() in terms of CUtil::Command()
Change ExecOS() to accept a list of strings.
This allows to better pass filenames with quotes, whitespace, and other 'strange' characters.
Also this should allow xbmc.System.Exec to accept parameters for commands.

NOTE: The _WIN32 version uses only the first argument passed (since CWIN32Util::XBMCShellExecute takes just a single string argument)
use copy-constructor to pass messages
Introduce a PID-watcher object for monitoring the running state of processes.
Convert the ExecOS() function to use the new PIDWatcher object