如何从 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(pid, SIGTERM); //please terminate
并且您可以使用waitpid在它终止后检索其退出状态。
(系统内部使用fork
+ execv
(它执行一个 shell) + waitpid
。因为这waitpid
部分不是分开的system
,system
所以让你等待子进程完成。)
您可能还需要查看dup2和pipe或socketpair来设置与子进程的基于 fildescriptor 的通信通道(如果您只需要非常基本的通信,还有其他选项,例如共享内存、消息队列或信号) .
手册页是管理进程和 IPC 的一个很好的资源。
如何从 C 执行/打开/运行另一个程序?:
利用system
怎么不屏蔽呢?
你必须实现多任务,所以fork
用来创建另一个进程或pthread_create
创建另一个线程,看看这个
我想要跨平台或最低限度的 macOS/Windows/Linux(Ubuntu) 工作解决方案。
system
适用于linux和windows,但我对其他平台没有任何想法