【发布时间】:2017-04-16 17:45:57
【问题描述】:
在 C 中,运行外部程序并获取该程序的 PID 的最佳方法是什么? 我在这里看到了一些关于使用 fork() 的答案......但据我所知,fork() 复制了当前进程并创建了一个子进程。如果可能的话,我想创建一个完全分离的上下文......并且获得 PID 的原因是在未来完全终止这个过程。当我的服务器可以发送命令以在客户端上启动某些程序时,我正在构建一个客户端/服务器程序。这些程序是外部的,并且可以同时运行一个以上具有相同名称/可执行文件的 c(这就是为什么我不能“尝试”通过程序名称查找 pid)。此外,这些程序应该在“后台”运行......我的意思是,我不能锁定我的调用函数。 我不确定 fork() 在这种情况下是否会帮助我。
【问题讨论】:
-
你可以使用 daemon(3) 和安全的 pid 到某个文件,就像其他的守护进程一样
-
使用
fork()加上exec*()函数之一是执行此操作的正常方法。如果您需要重新组织 I/O 或关闭管道描述符或其他任何内容,它比posix_spawn()更直接。你可以使用posix_spawn()来操作它们,但这很辛苦。