如何從C執行/打開/運行另一個程序,而不是阻止它,但讓它同時運行。然後我想做一些測試,如服務器/客戶端,然後如果這已經完成,我想殺死/關閉此程序。我已閱讀約從C打開/運行另一個程序,然後關閉這個程序
system() or execv()
但首先似乎阻止了等待結果,第二似乎只在Linux上工作?在最好的情況下,我希望有跨平臺或最低的MacOS/Windows/Linux(Ubuntu)工作解決方案。當我不再需要它時,我也需要關閉這個以前打開的程序。
如何從C執行/打開/運行另一個程序,而不是阻止它,但讓它同時運行。然後我想做一些測試,如服務器/客戶端,然後如果這已經完成,我想殺死/關閉此程序。我已閱讀約從C打開/運行另一個程序,然後關閉這個程序
system() or execv()
但首先似乎阻止了等待結果,第二似乎只在Linux上工作?在最好的情況下,我希望有跨平臺或最低的MacOS/Windows/Linux(Ubuntu)工作解決方案。當我不再需要它時,我也需要關閉這個以前打開的程序。
POSIX的方式做到這一點(這也許可以在Windows下使用呢? - https://technet.microsoft.com/en-us/library/bb463220.aspx)任何想法 是使用fork + exec*組合:
您可以使用fork來創建複製當前進程的新進程。 你的句柄過程是一個INT進程標識符(PID):
int pid;
if (0 > (pid=fork()){
perror("fork failed");
return -1;
}
if (0 == pid){
//CHILD PROCESS
printf("I'm the child process, my pid is: %d\n", getpid());
}
//pid > 0 ==> PARENT PROCESS
puts ("I'm the parent process");
printf("The pid of the child I've just spawned is %d\n", pid);
要運行在子進程中的可執行文件,使用exec*功能,以取代目前的(例如,孩子的,如果你在兒童中運行它)使用從可執行文件加載的過程映像處理映像。
在家長,您可以再使用PID句柄kill過程(=要求其終止):
kill(pid, SIGTERM); //please terminate
,您可以使用waitpid檢索其退出狀態已經終止之後。
(system內部使用fork
+ execv
(IT高管殼)+ waitpid
。因爲waitpid
部分不system
分開,system
讓你等待子進程結束。)
你可能也想看看dup2和pipe或socketpair建立一個基於fildescriptor,通信信道與子進程(也有其他選項,如共享內存,消息隊列,或信號如果你只需要非常基本的溝通)。
manpages是管理進程和IPC的很好的資源。
thx這有助於很多:)我想我將在未來使用它,但現在我重新設計我的測試更簡單:1.在單獨的pthread上運行測試服務器2.執行shell cmd以使用popen()3回顯此服務器。獲取cmd輸出並聲明它是正確的。 –