从C打开/运行另一个程序,然后关闭这个程序
问题描述:
如何从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输出并声明它是正确的。 –