X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fbf456aa8952c6d2d3edeea1208b0e3159a3cb8d..b72aa48cdeca3530ffb6ac5af438835d58bf79d9:/src/unix/utilsunx.cpp diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index 83e04373a4..fbeb877d03 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -155,7 +155,7 @@ int wxKill(long pid, wxSignal sig, wxKillError *rc) int err = kill((pid_t)pid, (int)sig); if ( rc ) { - switch ( err ) + switch ( errno ) { case 0: *rc = wxKILL_OK; @@ -290,6 +290,29 @@ bool wxShell(const wxString& command, wxArrayString& output) return wxExecute(wxMakeShellCommand(command), output); } +// Shutdown or reboot the PC +bool wxShutdown(wxShutdownFlags wFlags) +{ + wxChar level; + switch ( wFlags ) + { + case wxSHUTDOWN_POWEROFF: + level = _T('0'); + break; + + case wxSHUTDOWN_REBOOT: + level = _T('6'); + break; + + default: + wxFAIL_MSG( _T("unknown wxShutdown() flag") ); + return FALSE; + } + + return system(wxString::Format(_T("init %c"), level).mb_str()) == 0; +} + + #if wxUSE_GUI void wxHandleProcessTermination(wxEndProcessData *proc_data) @@ -650,6 +673,15 @@ long wxExecute(wxChar **argv, if ( fd != STDERR_FILENO ) close(fd); } + +#ifndef __VMS + if ( flags & wxEXEC_MAKE_GROUP_LEADER ) + { + // Set process group to child process' pid. Then killing -pid + // of the parent will kill the process and all of its children. + setsid(); + } +#endif } // redirect stdio, stdout and stderr