从另一个C流程创建一个新的独立流程

时间:2009-05-29 18:31:39

标签: c process sockets exec fork

存在两个C可执行文件A和B. A和B通过套接字相互通信。

B可以单独启动,也可以通过A启动。

  1. 如果首先启动B并接下来启动A,则A和B正常启动而没有问题。 即使A重新启动,也没有问题。

  2. 如果B通过A启动,则A和B正常启动。但是这里通信端口绑定到A和B.这里,如果重新启动A,则A无法启动。

  3. 由于B是通过A启动的,因此进程A是进程B的父进程。

    那么,是否有任何方法可以独立于流程A启动流程B?

    我们尝试使用fork,但是当我们尝试启动exe时使用fork,正在启动两个进程而不是一个进程。

3 个答案:

答案 0 :(得分:3)

你有没有尝试使用一个'包装'可执行文件,它可以分两次 - 一次用于A,一次用于B - 然后自杀?这将使A和B作为单独的进程处于活动状态,然后由init进程继承,并且应该可以安全地重新启动。

答案 1 :(得分:0)

您确定正确检查 fork()的返回值吗?

像:

pid_t pid;
if (pid == 0) {
    /* child */
}
else if (pid > 0) {
    /* parent */
}
else {
    /* error */
}

答案 2 :(得分:0)

您使用的是Unix域套接字还是常规网络套接字?

哪个进程A或B正在侦听套接字(被动打开),哪个正在进行活动打开?

当您确定A应该运行B时,代码如何确定这是必要的?

你在fork和exec之前打开套接字吗?

我从给出的信息中得到的印象是:

  • 您使用网络套接字
  • B是听众

但我很容易弄错。

我想知道你是否遇到问题,因为A已经在fork和exec B之前创建了活动套接字,所以当A终止时,套接字的活动端没有干净地关闭,因为B有一个打开的套接字副本用于写入以及A.当你进行fork时,子进程应该在执行另一个进程之前清理不需要的文件描述符(例如套接字)。