• Home
  • Raw
  • Download

Lines Matching full:process

21  * \brief Process abstraction.
67 printf("Process launch failed: %s\n", message); in die()
139 deProcess *process = (deProcess *)deCalloc(sizeof(deProcess)); in deProcess_create() local
140 if (!process) in deProcess_create()
143 process->state = PROCESSSTATE_NOT_STARTED; in deProcess_create()
145 return process; in deProcess_create()
148 static void deProcess_cleanupHandles(deProcess *process) in deProcess_cleanupHandles() argument
150 if (process->standardIn) in deProcess_cleanupHandles()
151 deFile_destroy(process->standardIn); in deProcess_cleanupHandles()
153 if (process->standardOut) in deProcess_cleanupHandles()
154 deFile_destroy(process->standardOut); in deProcess_cleanupHandles()
156 if (process->standardErr) in deProcess_cleanupHandles()
157 deFile_destroy(process->standardErr); in deProcess_cleanupHandles()
159 process->pid = 0; in deProcess_cleanupHandles()
160 process->standardIn = NULL; in deProcess_cleanupHandles()
161 process->standardOut = NULL; in deProcess_cleanupHandles()
162 process->standardErr = NULL; in deProcess_cleanupHandles()
165 void deProcess_destroy(deProcess *process) in deProcess_destroy() argument
168 if (deProcess_isRunning(process)) in deProcess_destroy()
170 deProcess_kill(process); in deProcess_destroy()
171 deProcess_waitForFinish(process); in deProcess_destroy()
174 deProcess_cleanupHandles(process); in deProcess_destroy()
175 deFree(process->lastError); in deProcess_destroy()
176 deFree(process); in deProcess_destroy()
179 const char *deProcess_getLastError(const deProcess *process) in deProcess_getLastError() argument
181 return process->lastError ? process->lastError : "No error"; in deProcess_getLastError()
184 int deProcess_getExitCode(const deProcess *process) in deProcess_getExitCode() argument
186 return process->exitCode; in deProcess_getExitCode()
189 static bool deProcess_setError(deProcess *process, const char *error) in deProcess_setError() argument
191 if (process->lastError) in deProcess_setError()
193 deFree(process->lastError); in deProcess_setError()
194 process->lastError = NULL; in deProcess_setError()
197 process->lastError = deStrdup(error); in deProcess_setError()
198 return process->lastError != NULL; in deProcess_setError()
201 static bool deProcess_setErrorFromErrno(deProcess *process, const char *message) in deProcess_setErrorFromErrno() argument
206 return deProcess_setError(process, message); in deProcess_setErrorFromErrno()
217 bool deProcess_start(deProcess *process, const char *commandLine, const char *workingDirectory) in deProcess_start() argument
225 if (process->state == PROCESSSTATE_RUNNING) in deProcess_start()
227 deProcess_setError(process, "Process already running"); in deProcess_start()
230 else if (process->state == PROCESSSTATE_FINISHED) in deProcess_start()
232 deProcess_cleanupHandles(process); in deProcess_start()
233 process->state = PROCESSSTATE_NOT_STARTED; in deProcess_start()
238 deProcess_setErrorFromErrno(process, "pipe() failed"); in deProcess_start()
252 deProcess_setErrorFromErrno(process, "fork() failed"); in deProcess_start()
264 /* Child process. */ in deProcess_start()
296 /* Parent process. */ in deProcess_start()
335 deProcess_setError(process, errBuf); in deProcess_start()
345 process->pid = pid; in deProcess_start()
346 process->state = PROCESSSTATE_RUNNING; in deProcess_start()
353 process->standardIn = deFile_createFromHandle((uintptr_t)pipeIn[1]); in deProcess_start()
354 process->standardOut = deFile_createFromHandle((uintptr_t)pipeOut[0]); in deProcess_start()
355 process->standardErr = deFile_createFromHandle((uintptr_t)pipeErr[0]); in deProcess_start()
357 if (!process->standardIn) in deProcess_start()
360 if (!process->standardOut) in deProcess_start()
363 if (!process->standardErr) in deProcess_start()
370 bool deProcess_isRunning(deProcess *process) in deProcess_isRunning() argument
372 if (process->state == PROCESSSTATE_RUNNING) in deProcess_isRunning()
376 if (waitpid(process->pid, &status, WNOHANG) == 0) in deProcess_isRunning()
382 process->state = PROCESSSTATE_FINISHED; in deProcess_isRunning()
392 bool deProcess_waitForFinish(deProcess *process) in deProcess_waitForFinish() argument
397 if (process->state != PROCESSSTATE_RUNNING) in deProcess_waitForFinish()
399 deProcess_setError(process, "Process is not running"); in deProcess_waitForFinish()
404 while ((waitResult = waitpid(process->pid, &status, 0)) != process->pid) in deProcess_waitForFinish()
408 if (waitResult != process->pid) in deProcess_waitForFinish()
410 deProcess_setErrorFromErrno(process, "waitpid() failed"); in deProcess_waitForFinish()
416 deProcess_setErrorFromErrno(process, "waitpid() failed"); in deProcess_waitForFinish()
420 process->exitCode = WEXITSTATUS(status); in deProcess_waitForFinish()
421 process->state = PROCESSSTATE_FINISHED; in deProcess_waitForFinish()
425 static bool deProcess_sendSignal(deProcess *process, int sigNum) in deProcess_sendSignal() argument
427 if (process->state != PROCESSSTATE_RUNNING) in deProcess_sendSignal()
429 deProcess_setError(process, "Process is not running"); in deProcess_sendSignal()
433 if (kill(process->pid, sigNum) == 0) in deProcess_sendSignal()
437 deProcess_setErrorFromErrno(process, "kill() failed"); in deProcess_sendSignal()
442 bool deProcess_terminate(deProcess *process) in deProcess_terminate() argument
444 return deProcess_sendSignal(process, SIGTERM); in deProcess_terminate()
447 bool deProcess_kill(deProcess *process) in deProcess_kill() argument
449 return deProcess_sendSignal(process, SIGKILL); in deProcess_kill()
452 deFile *deProcess_getStdIn(deProcess *process) in deProcess_getStdIn() argument
454 return process->standardIn; in deProcess_getStdIn()
457 deFile *deProcess_getStdOut(deProcess *process) in deProcess_getStdOut() argument
459 return process->standardOut; in deProcess_getStdOut()
462 deFile *deProcess_getStdErr(deProcess *process) in deProcess_getStdErr() argument
464 return process->standardErr; in deProcess_getStdErr()
467 bool deProcess_closeStdIn(deProcess *process) in deProcess_closeStdIn() argument
469 if (process->standardIn) in deProcess_closeStdIn()
471 deFile_destroy(process->standardIn); in deProcess_closeStdIn()
472 process->standardIn = NULL; in deProcess_closeStdIn()
479 bool deProcess_closeStdOut(deProcess *process) in deProcess_closeStdOut() argument
481 if (process->standardOut) in deProcess_closeStdOut()
483 deFile_destroy(process->standardOut); in deProcess_closeStdOut()
484 process->standardOut = NULL; in deProcess_closeStdOut()
491 bool deProcess_closeStdErr(deProcess *process) in deProcess_closeStdErr() argument
493 if (process->standardErr) in deProcess_closeStdErr()
495 deFile_destroy(process->standardErr); in deProcess_closeStdErr()
496 process->standardErr = NULL; in deProcess_closeStdErr()
531 static bool deProcess_setError(deProcess *process, const char *error) in deProcess_setError() argument
533 if (process->lastError) in deProcess_setError()
535 deFree(process->lastError); in deProcess_setError()
536 process->lastError = NULL; in deProcess_setError()
539 process->lastError = deStrdup(error); in deProcess_setError()
540 return process->lastError != NULL; in deProcess_setError()
543 static bool deProcess_setErrorFromWin32(deProcess *process, const char *msg) in deProcess_setErrorFromWin32() argument
558 return deProcess_setError(process, errBuf); in deProcess_setErrorFromWin32()
564 return deProcess_setError(process, errBuf); in deProcess_setErrorFromWin32()
570 deProcess *process = (deProcess *)deCalloc(sizeof(deProcess)); in deProcess_create() local
571 if (!process) in deProcess_create()
574 process->state = PROCESSSTATE_NOT_STARTED; in deProcess_create()
576 return process; in deProcess_create()
579 void deProcess_cleanupHandles(deProcess *process) in deProcess_cleanupHandles() argument
581 DE_ASSERT(!deProcess_isRunning(process)); in deProcess_cleanupHandles()
583 if (process->standardErr) in deProcess_cleanupHandles()
584 deFile_destroy(process->standardErr); in deProcess_cleanupHandles()
586 if (process->standardOut) in deProcess_cleanupHandles()
587 deFile_destroy(process->standardOut); in deProcess_cleanupHandles()
589 if (process->standardIn) in deProcess_cleanupHandles()
590 deFile_destroy(process->standardIn); in deProcess_cleanupHandles()
592 if (process->procInfo.hProcess) in deProcess_cleanupHandles()
593 CloseHandle(process->procInfo.hProcess); in deProcess_cleanupHandles()
595 if (process->procInfo.hThread) in deProcess_cleanupHandles()
596 CloseHandle(process->procInfo.hThread); in deProcess_cleanupHandles()
598 process->standardErr = NULL; in deProcess_cleanupHandles()
599 process->standardOut = NULL; in deProcess_cleanupHandles()
600 process->standardIn = NULL; in deProcess_cleanupHandles()
601 process->procInfo.hProcess = NULL; in deProcess_cleanupHandles()
602 process->procInfo.hThread = NULL; in deProcess_cleanupHandles()
605 void deProcess_destroy(deProcess *process) in deProcess_destroy() argument
607 if (deProcess_isRunning(process)) in deProcess_destroy()
609 deProcess_kill(process); in deProcess_destroy()
610 deProcess_waitForFinish(process); in deProcess_destroy()
613 deProcess_cleanupHandles(process); in deProcess_destroy()
614 deFree(process->lastError); in deProcess_destroy()
615 deFree(process); in deProcess_destroy()
618 const char *deProcess_getLastError(const deProcess *process) in deProcess_getLastError() argument
620 return process->lastError ? process->lastError : "No error"; in deProcess_getLastError()
623 int deProcess_getExitCode(const deProcess *process) in deProcess_getExitCode() argument
625 return process->exitCode; in deProcess_getExitCode()
628 bool deProcess_start(deProcess *process, const char *commandLine, const char *workingDirectory) in deProcess_start() argument
641 if (process->state == PROCESSSTATE_RUNNING) in deProcess_start()
643 deProcess_setError(process, "Process already running"); in deProcess_start()
646 else if (process->state == PROCESSSTATE_FINISHED) in deProcess_start()
648 /* Process finished, clean up old cruft. */ in deProcess_start()
649 deProcess_cleanupHandles(process); in deProcess_start()
650 process->state = PROCESSSTATE_NOT_STARTED; in deProcess_start()
665 deProcess_setErrorFromWin32(process, "CreatePipe() failed"); in deProcess_start()
674 deProcess_setErrorFromWin32(process, "CreatePipe() failed"); in deProcess_start()
685 deProcess_setErrorFromWin32(process, "CreatePipe() failed"); in deProcess_start()
703 &startInfo, &process->procInfo)) in deProcess_start()
706 deProcess_setErrorFromWin32(process, "CreateProcess() failed"); in deProcess_start()
719 process->state = PROCESSSTATE_RUNNING; in deProcess_start()
727 process->standardIn = deFile_createFromHandle((uintptr_t)stdInWrite); in deProcess_start()
728 process->standardOut = deFile_createFromHandle((uintptr_t)stdOutRead); in deProcess_start()
729 process->standardErr = deFile_createFromHandle((uintptr_t)stdErrRead); in deProcess_start()
734 bool deProcess_isRunning(deProcess *process) in deProcess_isRunning() argument
736 if (process->state == PROCESSSTATE_RUNNING) in deProcess_isRunning()
739 BOOL result = GetExitCodeProcess(process->procInfo.hProcess, (LPDWORD)&exitCode); in deProcess_isRunning()
743 deProcess_setErrorFromWin32(process, "GetExitCodeProcess() failed"); in deProcess_isRunning()
752 process->exitCode = exitCode; in deProcess_isRunning()
753 process->state = PROCESSSTATE_FINISHED; in deProcess_isRunning()
761 bool deProcess_waitForFinish(deProcess *process) in deProcess_waitForFinish() argument
763 if (process->state == PROCESSSTATE_RUNNING) in deProcess_waitForFinish()
765 if (WaitForSingleObject(process->procInfo.hProcess, INFINITE) != WAIT_OBJECT_0) in deProcess_waitForFinish()
767 deProcess_setErrorFromWin32(process, "WaitForSingleObject() failed"); in deProcess_waitForFinish()
770 return !deProcess_isRunning(process); in deProcess_waitForFinish()
774 deProcess_setError(process, "Process is not running"); in deProcess_waitForFinish()
779 static bool stopProcess(deProcess *process, bool kill) in stopProcess() argument
781 if (process->state == PROCESSSTATE_RUNNING) in stopProcess()
783 if (!TerminateProcess(process->procInfo.hProcess, kill ? -1 : 0)) in stopProcess()
785 deProcess_setErrorFromWin32(process, "TerminateProcess() failed"); in stopProcess()
793 deProcess_setError(process, "Process is not running"); in stopProcess()
798 bool deProcess_terminate(deProcess *process) in deProcess_terminate() argument
800 return stopProcess(process, false); in deProcess_terminate()
803 bool deProcess_kill(deProcess *process) in deProcess_kill() argument
805 return stopProcess(process, true); in deProcess_kill()
808 deFile *deProcess_getStdIn(deProcess *process) in deProcess_getStdIn() argument
810 return process->standardIn; in deProcess_getStdIn()
813 deFile *deProcess_getStdOut(deProcess *process) in deProcess_getStdOut() argument
815 return process->standardOut; in deProcess_getStdOut()
818 deFile *deProcess_getStdErr(deProcess *process) in deProcess_getStdErr() argument
820 return process->standardErr; in deProcess_getStdErr()
823 bool deProcess_closeStdIn(deProcess *process) in deProcess_closeStdIn() argument
825 if (process->standardIn) in deProcess_closeStdIn()
827 deFile_destroy(process->standardIn); in deProcess_closeStdIn()
828 process->standardIn = NULL; in deProcess_closeStdIn()
835 bool deProcess_closeStdOut(deProcess *process) in deProcess_closeStdOut() argument
837 if (process->standardOut) in deProcess_closeStdOut()
839 deFile_destroy(process->standardOut); in deProcess_closeStdOut()
840 process->standardOut = NULL; in deProcess_closeStdOut()
847 bool deProcess_closeStdErr(deProcess *process) in deProcess_closeStdErr() argument
849 if (process->standardErr) in deProcess_closeStdErr()
851 deFile_destroy(process->standardErr); in deProcess_closeStdErr()
852 process->standardErr = NULL; in deProcess_closeStdErr()